2017-01-12 4 views
1

私は次の文字列を返す2つのメソッドを持っていることにより、1つの文字列に2つの文字列をマージこれらを結合して次のような結果を得ることができます:が条件と保つため

"Subj1 (1) 
Subj3 
Subj5 (6) 
Subj7 
Subj4 (2) 
Subj2 (8)" 

私はoメソッドのシグネチャを変更して、これらのメソッドが結果を他の形式で返すようにするか?

マージロジック:最初の文字列の項目が2番目の文字列に存在する場合、2番目の文字列の項目が2番目の文字列に存在しない場合は結果文字列に挿入し、最初の文字列の項目を結果文字列に入れます

+0

'" Subj1かどうかをチェックするために、あなたの実際の基準は何ですか"と" Subj1(1) "は同じですか?あなたは ''名前が長いSubj1 ''を持つことができますか? –

+3

マージのロジックをより明確に理解できますか?ドロップするアイテムを選択する方法と最終リストの順序が決まる方法など – Chris

+0

@Chrisマージロジック: 最初の文字列の項目が2番目の文字列に存在する場合は2番目の文字列の項目を結果文字列に入れます 最初の文字列の項目が2番目の文字列に存在しない場合、最初の文字列の項目を結果文字列に入れます – netwer

答えて

2

ロジックを正しく理解している場合は、2つの手順が必要です。

ステップ1は、改行の文字列を分割する:

var s1 = "Subj1 
Subj3 
Subj5 
Subj7" 
var s2 = "Subj1 (1) 
Subj5 (6) 
Subj4 (2) 
Subj2 (8)" 
var s1words = split(s1, NewLine) 
var s2words = split(s2, NewLine) 

ステップ2、s2wordsでs1wordsの各単語を見つけることを、そして存在する場合、それを使用する:

var res 
for each (word w in s1words) { 
    for each (word x in s2words) { 
     if (x.starts_with(w)) 
      res += x + NewLine 
     else 
      res += w + NewLine 

非常に効率的ではありませんが、シンプル。

1

あなたがリストとしてそれらを一緒にマージしてからでグループと、各グループごとにサフィックスを持つものを得ることができ、この

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication42 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string input1 = 
       "Subj1\n" + 
       "Subj3\n" + 
       "Subj5\n" + 
       "Subj7\n"; 
      string input2 = 

       "Subj1 (1)\n" + 
       "Subj5 (6)\n" + 
       "Subj4 (2)\n" + 
       "Subj2 (8)\n"; 

      string[] stringArray= (input1 + input2).Split(new char[] {'\n'}, StringSplitOptions.RemoveEmptyEntries); 
      var groups = stringArray.GroupBy(x => x.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)[0]); 
      string output = string.Join("\n", groups.Select(x => x.OrderByDescending(y => y.Length).FirstOrDefault())); 
     } 
    } 
} 
1

をお試しください:

var a1 = s1.Split(sep, StringSplitOptions.None); 
var a2 = s2.Split(sep, StringSplitOptions.None); 
var u = a1.Concat(a2); 
var s = u.GroupBy(x => x.Split(' ')[0]) 
     .Select(y => y.OrderByDescending(z => z.Length).FirstOrDefault()) 
     .ToList(); 
String.Join("\r\n", s)