c#如何检查项目列表是否按字母顺序排列

时间:2016-05-04 06:40:40

标签: c# selenium-webdriver

我列出了10个Iwebelements。我已经将他们的文本存储到另一个列表中(因为我只需要检查所有10个是按字母顺序排列)

任何人都可以告诉我该怎么做。

(下面的代码将获取所有元素的列表,使用Foreach我将获取他们的文本并将其添加到X列表中)

 IList<IWebElement> otherSports = Driver.FindElements(By.CssSelector(".sports-buttons-container .other-sport .sport-name"));
        List<string> x = new List<string>();

        foreach (var item in otherSports)
        {
            string btnText = item.Text.Replace(System.Environment.NewLine, "");
            x.Add(item.Text.Replace(System.Environment.NewLine, ""));
        }

注意: - 我不想对列表进行排序。我只想查看列表X中的所有项目是否按字母顺序排列。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

您可以使用StringComparer.Ordinal检查两个字符串是否按字母顺序排列。

var alphabetical = true;
for (int i = 0; i < x.Count - 1; i++)
{
    if (StringComparer.Ordinal.Compare(x[i], x[i + 1]) > 0)
    {
        alphabetical = false;
        break;
    }
}

如果您更喜欢LINQ(但不太可读,IMO),则可以选择其他解决方案

var alphabetical = !x.Where((s, n) => n < x.Count - 1 && StringComparer.Ordinal.Compare(x[n], x[n + 1]) > 0).Any();

编辑,因为您正在生成自己的列表,所以您可以在创建列表时将解决方案1添加到代码中,这样会更有效。

IList<IWebElement> otherSports = Driver.FindElements(By.CssSelector(".sports-buttons-container .other-sport .sport-name"));
List<string> x = new List<string>();
var alphabetical = true;
string previous = null;

foreach (var item in otherSports)
{
    string btnText = item.Text.Replace(System.Environment.NewLine, "");
    var current = item.Text.Replace(System.Environment.NewLine, "");
    x.Add(current);

    if (previous != null && StringComparer.Ordinal.Compare(previous,current) > 0)
    {
        alphabetical = false;
    }
    previous = current;
}

答案 1 :(得分:0)

我会这样做

png

因此,此方法将失败,直到列表x列表按字母顺序排序