【问题标题】:How to get duplicated item substrings from a list? c#如何从列表中获取重复的项目子字符串? C#
【发布时间】:2020-10-08 08:39:13
【问题描述】:

假设我有一个物品清单:

TEST1 -- 99,56$ -- 25 PCS  -- 10:56
TEST2 -- 56,57$ -- 57 PCS  -- 11:01
TEST3 -- 56,57$ -- 43 PCS  -- 11:06
TEST4 -- 56,57$ -- 59 PCS  -- 11:33
TEST3 -- 56,57$ -- 43 PCS  -- 11:06
TEST3 -- 56,57$ -- 43 PCS  -- 11:06
TEST1 -- 58,98$ -- 25 PCS  -- 11:45

我只想将 NAME 值(NAME 值是 TEST 的第一部分)和 PCS 值相同的重复项放入一个新列表中,因此我想要的新列表输出为:

TEST3 -- 56,57$ -- 43 PCS  -- 11:06
TEST1 -- 99,56$ -- 25 PCS  -- 10:56
TEST1 -- 58,98$ -- 25 PCS  -- 11:45

我的当前代码:

namespace Test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

   

        private void button1_Click_1(object sender, EventArgs e)
        {
            List<string> listwithbuys = new List<string>(new string[] { 
"TEST1 -- 99,56$ -- 25 PCS  -- 10:56",
"TEST2 -- 56,57$ -- 57 PCS  -- 11:01",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST4 -- 56,57$ -- 59 PCS  -- 11:33",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST1 -- 58,98$ -- 25 PCS  -- 11:45" });
             List<String> duplicates = listwithbuys.GroupBy(x => x)
                             .Where(g => g.Count() > 1)
                             .Select(g => g.Key)
                             .ToList();
           listbox1.DataSource = duplicates;
        }
    }
}

上面的代码会打印我:

TEST3 -- 56,57$ -- 43 PCS  -- 11:06

这不是我的目标,就像我说的那样,我只希望它给我重复的项目,其中 NAME 和 PCS 值是相同的。感谢任何试图提供帮助的人:)

【问题讨论】:

  • 名称是哪一列?
  • 第一部分,TEST所在的地方
  • 看来,你应该拆分你的字符串
  • @HassanBrate 您已经对整个字符串进行了分组。这就是为什么TEST3 是唯一的重复项。完全相同的行在您的源列表中出现了 3 次。
  • 如何对字符串的 2 个指定部分进行分组,知道吗?

标签: c# arrays list foreach items


【解决方案1】:

你能试试这个代码吗,如果有任何疑问,请告诉我。

List<string> listwithbuys = new List<string>(new string[] {
"TEST1 -- 99,56$ -- 25 PCS  -- 10:56",
"TEST2 -- 56,57$ -- 57 PCS  -- 11:01",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST4 -- 56,57$ -- 59 PCS  -- 11:33",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST3 -- 56,57$ -- 43 PCS  -- 11:06",
"TEST1 -- 58,98$ -- 25 PCS  -- 11:45" });
            List<String> duplicates = listwithbuys.GroupBy(x => new { Name = x.Split(new string[] { " -- " }, StringSplitOptions.None)[0], 
                                                                     PCS = x.Split(new string[] { " -- " }, StringSplitOptions.None)[2] })
                            .Where(g => g.Count() > 1)
                            .Select(g => g.LastOrDefault())
                            .ToList();

【讨论】:

  • 无法编译说:` Name = x.Split(" -- ")[0], PCS = x.Split(" -- ")[2] } ` " Eror : 从字符串到字符不可能”@MukeshVadodariya
  • 我已经用 .Net core 3.1 对其进行了测试,这里是演示示例。 dotnetfiddle.net/y971YP
  • 我使用的是 NET 4.5 也许这就是为什么 :( @MukeshVadodariya
  • @HassanBrate,将 .net 核心转换为 .Net 4.5,现在就试试吧。这是演示 - dotnetfiddle.net/axuR5N
  • 我爱你,伙计
猜你喜欢
  • 1970-01-01
  • 2014-07-01
  • 2020-03-18
  • 1970-01-01
  • 2015-11-04
  • 2014-07-11
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
相关资源
最近更新 更多