【问题标题】:How to sort where an object is added to based on it's attribute如何根据对象的属性对添加对象的位置进行排序
【发布时间】:2020-02-11 15:32:20
【问题描述】:

我想知道是否有人可以阐明一种将具有相同属性值的对象添加到单独列表的方法。

我怎样才能做到这一点?

【问题讨论】:

  • 不要忘记将答案标记为已接受,如果它解决了您的问题,如果它没有请澄清您的问题。
  • @RandRandom 感谢您的提醒 - 明天会更新。

标签: c# .net list linq


【解决方案1】:

我建议使用Dictionary<int, List<Candidate>> 而不是多个列表。

您的CandidateList 可能如下所示:

public class CandidateList
{
    private Dictionary<int, List<Candidate>> _candidatesByFrameNumber;

    public CandidateList()
    {
        _candidatesByFrameNumber = new Dictionary<int, List<Candidate>>();
    }

    public void Add(Candidate candidate)
    {
        if (!_candidatesByFrameNumber.TryGetValue(candidate.FrameNumber, out var lst))
        {
            lst = new List<Candidate>();
            _candidatesByFrameNumber.Add(candidate.FrameNumber, lst);
        }

        lst.Add(candidate);
    }
}

【讨论】:

    【解决方案2】:

    我认为您根本不需要多个列表。你让问题复杂化了。 您只需要一个简单的列表来存储您的Candidates 并通过frameNumber 或其他字段从列表中获取查询。

    public class CandidateList
    {
        public List<Candidate> _CandidatesList;
    
        public CandidateList()
        {
            _CandidatesList = new List<Candidate>();
        }
    
        // actually you need this method anymore
        // you can use _CandidatesList.Add() instead.
        public void Add(Candidate candidate)
        {
            _CandidatesList.Add(candidate);
        }
    
    
        public IEnumerable<Candidate> GetCandidateByFrameNumber(int frameNumber)
        {
            // this is how you can query the data depending your needs and get seprated results.
            return _CandidatesList.Where(q => q.FrameNumber == frameNumber );
        }   
    }
    
    

    【讨论】:

      【解决方案3】:
      public class CandidateList
      {
      
       private List<Dictionary<Int, Candidate>> candidatList;
      
       public CandidateList()
       {
          candidatList= new List<Dictionary<int, Candidate>>();
       }
      
       public void Add(Candidate candidate)
       {
      
          Var element = New <Dictionary<candidate.FrameNumber, Candidate>();
          candidatList.Add(element);
       }
      
       public List<Candidate> GetList(int frameNum)
       {
          List<Candidate> lst = New List<Candidate>()
          foreach (int key in CandidateList.Keys)
          {
              if (key == frameNum)
              {
                lst.Add(CandidateList[key])
              }
          }
          return lst; 
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-05
        • 2022-01-11
        相关资源
        最近更新 更多