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不一样returnListInputString不一样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 回答
0

更新代码

您可以使用以下方法找到字谜并转换为列表列表。

    public static List<List<string>> GetAnagramEquivalents(List<string> InputArray)
    {
        Dictionary<string, List<string>> DictionaryList = new Dictionary<string, List<string>>();
        List<List<string>> ReturnList = new List<List<string>>();
        for (int x = 0; x < InputArray.Count; ++x)
        {
            char[] InputCharArray = InputArray[x].ToCharArray();
            Array.Sort(InputCharArray);
            string InputString = new string(InputCharArray);
            if (DictionaryList.ContainsKey(InputString))
            {
                DictionaryList[InputString].Add(InputArray[x]);
            }
            else
            {
                DictionaryList.Add(InputString, new List<string>());
                DictionaryList[InputString].Add(InputArray[x]);
            }
        }
        foreach (var item in DictionaryList)
        {
            ReturnList.Add(item.Value);
        }
        return ReturnList;
    }
于 2013-10-17T12:11:28.780 回答