2016-05-04 6 views
0

私は10の栄養素のリストを持っています。私はテキストを別のリストに保存しました。(すべてがアルファベット順であることを確認するだけです)c#アイテムのリストがアルファベット順であるかどうかを確認する方法

どのようにすればいいか教えてください。

(コードの下にあるすべての要素のリストを取得し、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のすべての項目がアルファベット順であるかどうかを確認したいだけです。

お願いします。

+3

可能な複製を検証します](http://stackoverflow.com/questions/23562150/linq-expression-to-validate-if-list-is-ordered-ascending-or-descending) –

+0

これは主に重複していますが、受け入れられた答えは非常に非効率的です。あなたがソートされているかどうかを知るためにリストをソートする必要はなく、リストを通って新しい値が最後よりも大きいことを確認するだけです –

+0

@EuanSmithソートをしたくないので私はあなたに同意します。だから、あなたが示唆したように私はそれぞれの新しい価値をどのようにして最後のものよりも大きくすることができるのか教えてください。 – vic

答えて

0

私はこの方法では、それまではリストxのリストを失敗すること

[TestMethod] 
public void TestOrder() 
{ 
    IList<IWebElement> otherSports = Driver.FindElements(By.CssSelector(".sports-buttons-container .other-sport .sport-name")); 
    var x = otherSports.Select(item=>item.Text.Replace(System.Environment.NewLine, "")) 
    var sorted = new List<string>(); 
    sorted.AddRange(x.OrderBy(o=>o)); 
    Assert.IsTrue(x.SequenceEqual(sorted)); 
} 

のようにそれを行うだろうアルファベット順に並べている

リストが昇順または降順を注文される場合は、[LINQの式の
+0

: - 私はアルファにあることを確認したい。注文。しかし、私はアサートを置くという考えが好きでした。 – vic

+0

@vicよくアルファベット順であるかどうかチェックしたいですか?最初の文字だけをチェックしたいですか? –

+0

Biyachat: - 私はXのリストのすべてのアイテムを取得していると私はその注文に触れたくない。私はXのリストからそれらすべての項目がアルファベット順であるかどうかを確認したい。 – vic

2

StringComparer.Ordinalを使用して、2つの文字列がアルファベット順であるかどうかを確認できます。

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; 
    } 
} 

代替ソリューションあなたはリストにあなたの自己を生成しているので、あなたのコードの中に液1を追加することができますLINQ(あまり読み、IMO)

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

EDITを好む場合ときリストが作成されると、それはより効率的です。

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; 
} 
関連する問題