【问题标题】:Check List order is wrong or right , How to make code clear检查列表顺序错误或正确,如何使代码清晰
【发布时间】:2019-07-17 18:55:52
【问题描述】:

我想检查列表顺序是否正确,我的解决方案就在这里。
它有效,但它看起来又脏又蠢,有没有更好的灵魂可以做到这一点?

我加了两个例子来说明是case。

public enum HI
{
    A,
    B,
    C
}

public class Test : MonoBehaviour
{
    public void TestOroder()
    {
        // check hiList order ----> A >B >C
        List<HI> hiList = new List<HI>() { HI.A, HI.B, HI.B, HI.B, HI.C , HI.C , HI.C };

        //right
        bool isRight = FindWorngOrder(hiList);

        // check hiList order ----> A >B >C
        List<HI> hiList2 = new List<HI>() { HI.A, HI.B, HI.C, HI.A ,HI.B, HI.B, HI.C };
        //worng
        bool isRight2 = FindWorngOrder(hiList);
    }

    public bool FindWorngOrder(List<HI> hiList)
    {
        bool haveWorngOrder;
        for (int i = 0; i < hiList.Count - 1; i++)
        {
            HI current = hiList[i];
            HI next = hiList[i + 1];

            if (current == HI.C && next == HI.A ||
                current == HI.C && next == HI.B)
            {
                return true;
            }

            if (current == HI.C && next == HI.B)
            {
                return true;
            }
        }

        return false;
    }
}

【问题讨论】:

  • 请显示至少 6 个按正确顺序的输入和至少 6 个不正确的输入,以便我们理解您的意思。
  • @mjwills 我编辑了我的问题 :)
  • OrderBy 进行排序,SequenceEqual 进行比较。
  • 已经回答here
  • 谢谢大家,我的@mjwills解决方案做得很好!!

标签: c#


【解决方案1】:

我建议使用:

public bool IsInTheSamerOrder(IEnumerable<HI> hiList)
{
    return hiList.SequenceEqual(hiList.OrderBy(z => z));
}

它与您的答案相似,但略短,不需要明确的List

【讨论】:

    【解决方案2】:

    @mjwills 回答

    public bool FindWorngOrder(List<HI> hiList)
        {
            List<HI> orderd = hiList.ToList();
            orderd.Sort();
    
            return orderd.SequenceEqual(hiList);
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2013-10-30
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      相关资源
      最近更新 更多