1

同じ文字で異なる単語を識別できるアナグラム ファインダー プログラムを作成しています。例えば:

input: ['cars', 'for', 'potatoes', 'racs', 'four', 'scar', 'creams', 'scream']
output: [ ["cars", "racs", "scar"], ["four"], ["for"], 
        ["potatoes"], ["creams","scream"] ]  

これは私が現在持っているコードです。

public List<List<string>> AnagramsFinder(List<string> words)
{
    List<List<string>> returnList = new List<List<string>>();


    for (int i = 0; i < words.Count; i++)
    {
        char[] inputCharArray = words[i].ToCharArray();

        Array.Sort(inputCharArray);

        string inputString = new string(inputCharArray);


        if (ReturnList.Contains(InputString))
        {
            ReturnList[InputString].Add(words[i]);
        }
        else
        {
            ReturnList.Add(InputString, new List<string>());
            ReturnList[InputString].Add(words[i]);
        }
    }

    return returnList;
}

if-else 文は表現したいものですが、.NET WCF 形式では有効ではありません。同じ目的を達成するためにif-elseステートメントを変更するのを手伝ってくれる人はいますか? どうもありがとう!!

4

3 に答える 3

1

C# 言語では大文字と小文字が区別されるため、

ReturnListと同じではありませんreturnList、と同じでInputStringはありませんinputString

古いコード:

if (ReturnList.Contains(InputString))
{
    ReturnList[InputString].Add(words[i]);
}
else
{
    ReturnList.Add(InputString, new List<string>());
    ReturnList[InputString].Add(words[i]);
}

良いコード:

if (returnList.Contains(inputString))
{
    returnList[inputString].Add(words[i]);
}
else
{
    returnList.Add(inputString, new List<string>());
    returnList[inputString].Add(words[i]);
}

しかし

 if (returnList.Contains(InputString))

returnListネストされた文字列のリストであるため、Containsパラメータは無効です!

foreachで繰り返し、

foreach( List<string> item in returnList )
{
  if( item.Contains(inputString) )
  ...
}
于 2013-10-17T06:22:23.650 に答える
0

文字列をリストと比較しようとしているようです

試す:

foreach( List<string> eachList in returnList )
{
  if( eachList.Contains(InputString) )
  ...
}
于 2013-10-17T06:23:08.303 に答える