LINQ - 选择最小计数

时间:2014-12-13 21:03:43

标签: c# linq

我有一个包含X的字符串列表。我想在其中选择最小计数X 的列表。例如:

CountMin("AXBXX", "AAX")将返回AAX

如何以简洁的方式编写这个qq LINQ?

3 个答案:

答案 0 :(得分:3)

public static string CountMin(IList<string> inputList) 
{ 
    if (inputList == null || !inputList.Any()) return null;
    var result = inputList.Select(s => new 
                          { 
                             Item = s,
                             Count => s.Count(ch => ch == 'X')
                          })
                          .OrderBy(item => item.Count).First().Item;
}

Snippet假设列表中的所有元素都与null不同。如果您需要它,它可以很容易地改进。

您也可以省略临时课程:

inputList.OrderBy(s => s.Count(c => c == 'X')).First();

答案 1 :(得分:0)

string[] list = {"AXBXX", "AAX", "AXX"};

string result = (from word in list
              select new { word, wordLen = (word.Length - (word.Replace("X", "")).Length) })
                .OrderBy(x => x.wordLen).First().word;

MessageBox.Show(result);

答案 2 :(得分:0)

这是一个答案,可以从列表中获取所有最小X个字符串。

var listOfStrings = new List<string>()
{
    "AXB",
    "ABXXC",
    "ABX",
};

var minimumXs =
    listOfStrings
        .GroupBy(x => x.Count(y => y == 'X'))
        .OrderBy(x => x.Key)
        .Take(1)
        .SelectMany(x => x);

这让我:

AXB 
ABX