【问题标题】:Find duplicates in a list and return list with position of duplicates在列表中查找重复项并返回具有重复项位置的列表
【发布时间】:2020-11-16 18:58:51
【问题描述】:

我知道有大量帖子涉及在列表中查找重复项。 这是一个 Find continuous duplicates in a List

我想要更多:返回一个列表,其中包含重复字符串的位置。

如果列表类似于 [0]=AAA [1]=BBB [3]=CCC [4]=AAA [5]=CCC 我想要一个像这样的扩展;

var dupList = lst.FindDuplicatesReturnPositions();

dupList = 0,4,5 甚至更好的 1,5,6。

提前致谢

帕特里克

添加 我明白我没有说清楚为什么是 1,5,6 而不是 0,4,5。 因此,作为代码,我更喜欢 0、4、5,但我必须将其应用于托盘矩阵。对于非编码员的客户,单元格从 1 开始,而不是从 0 开始。所以增加数字没什么大不了的,但如果位置从 1 开始,那就更好了

【问题讨论】:

  • 我不清楚您将如何获得这些索引。 0,4,5 和 1,5,6。另外我们都是程序员,我们希望看到示例数据编写和实现为实际代码
  • 0,4,5 将是 AAA,AAA,CCC。 1,5,6 将是 BBB,CCC,??? (因为您的示例数据中不包含索引 6)。我看不出“AAA”和“CCC”或“BBB”和“CCC”如何被视为字符串重复。
  • 你为什么不直接修改你链接的方法呢?与其让它返回值,不如返回位置。显然,要实现这一点,请避免使用之前对列表进行排序的方法。
  • 请看我的编辑。希望它现在被清除
  • 抱歉,我不明白为什么在重复列表中应该同时存在 0 和 4(对于 AAA),而不是同时存在 3 和 5(对于 (CCC))

标签: c# list duplicates


【解决方案1】:

你有:

public static List<int> FindDuplicatesReturnPositions(this List<string> list)
{
   List<int> res = new List<int>();
   HashSet<string> hashSet = new HashSet<string>();
   int index = 0; //int index = 1 if you want the other result
   foreach (var item in list)
   {
        if (hashSet.Contains(item))
        {
            res.Add(index);
        }
        else
        {
            hashSet.Add(item);
        }
        index++;
   }
            return res;
}

你应该使用的方式是:

var dupList = FindDuplicatesReturnPositions(lst);

【讨论】:

  • 这是我的问题。如果你在 OPs 测试数据上运行它。你不会得到指定的索引
  • 因此我必须假设这里的索引从 0 开始,所以如果我有 var lst = new System.Collections.Generic.List() { "AAA","BBB","CCC ","DDD","EEE","AAA","XXX","CCC","AAA" }; var dupList = FindDuplicatesReturnPositions(lst);结果将是 5,7,8,即“AAA”、“CCC”、“AAA”。这样就可以了,谢谢
  • OP数据的结果显然是错误的。返回索引 0 和 4,因为它们是重复的。但是只返回 5 而不是 3?返回 0 是一个错误,这就是为什么我的解决方案与 OPs 测试数据不匹配的原因。
  • [0]=AAA [1]=BBB [3]=CCC [4]=DDD [5]=AAA [6]=XXX [7]=CCC [8]=AAA 所以如果您扫描列表的第一个副本是 [5]=AAA 然后 [7]=CCC [8]=AAA ---> 因此 5,7,8
  • 我的意思是问题中提供的结果。
【解决方案2】:

嗨,男孩,如果您想列出重复项列表并对它们进行排序,您可以使用此代码,但我的代码只是示例。你可以使用这个方法。这在控制器 api 中工作。

namespace Web.UI.Controllers
{
    public class ListExamplesController : Controller
    {
        public ActionResult Index()
        {
            ListExamples listExamples = new ListExamples();
            var duplicatePets = listExamples.ReturnListOfPets()
                                            .GroupBy(x => x.StringValue)
                                            .Where(y => y.Count() > 1)
                                            .Select(z => z.Key).ToList();
            var model = new ExampleOfListViewModel
            {
                ListOfPets              = listExamples.ReturnListOfPets(),
                ListOfInts              = listExamples.ReturnListOfInts(),
                ListOfStrings           = listExamples.ReturnListOfStrings(),
                ListOfIntsJoined        = listExamples.ReturnListOfIntsJoin(),
                ListOfPetsDuplicates    = duplicatePets,
                ListOfIntsSorted        = listExamples.SortReturnListOfInts()
            };
            return View("~/Views/Home/ListExamples.cshtml",model);
        }
    }
} 

【讨论】:

  • 哇...在这里解压的东西太多了。虽然我所知道的是这个答案完全没有达到目标
猜你喜欢
  • 2013-02-21
  • 2015-10-04
  • 2013-11-17
  • 2021-01-06
  • 2023-03-23
  • 2012-11-30
  • 2019-01-15
  • 2011-12-23
相关资源
最近更新 更多