注册 登录
编程论坛 C语言论坛

请教: CLR中List<String^>^ 使用问题

追梦人zmrghy 发布于 2023-03-14 15:22, 735 次点击
删除List<String^>^中重复的元素。。。。

自己折腾了俩天,删除List<String^>^中重复的元素,功能实际了。语法却不理解了。。。。

程序代码:
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
    {
        String^ str1 = "00\r\n99\r\n11\r\n88\r\n22\r\n77\r\n33\r\n66\r\n44\r\n55\r\n55\r\n44\r\n66\r\n33\r\n77\r\n22\r\n88\r\n11\r\n99\r\n00";
        array<String^>^ arrstr = Regex::Split(str1, "\r\n");
        List<String^>^ liststr = gcnew List<String^>((Generic::IEnumerable<String^>^)arrstr);
        for each(auto i in liststr)
            textBox1->Text += i + "\r\n";
        textBox1->Text += "\r\n";
        for (short i = 0; i < liststr->Count; i++)
        {
            String^ Samples = liststr[i];
            for (short j = liststr->Count - 1; j > 0; j--)
                if (ReferenceEquals(Samples, liststr[j]))
                    liststr->RemoveAt(j);
        }
        for each(auto i in liststr)
            textBox1->Text += i + "\r\n";        
    }


只有本站会员才能查看附件,请 登录

功能实现了,但问题???
for (short i = 0; i < liststr->Count; i++)
        {
            String^ Samples = liststr[i];
            for (short j = liststr->Count - 1; j > 0; j--)
                if (ReferenceEquals(Samples, liststr[j]))
                    liststr->RemoveAt(j);
        }
for (short j = liststr->Count - 1; j > 0; j--)
为什么不是
for (short j = liststr->Count - 1; j > i; j--)
按照我的理解
for (short j = liststr->Count - 1; j > 0; j--)
liststr最后只能剩下"00"一个元素。




只有本站会员才能查看附件,请 登录

如果使用
for (short j = liststr->Count - 1; j > i; j--)
结果没有删除任何一个元素。






第二个问题,如何初始化一个“空”List<String^>^ liststr;

如果使用:
List<String^>^ liststr;
liststr->Add("AABB");
就会报错,大概意思是内存中没有为liststr分配空间。。。。
我的方法:
 String^ str1 = "00\r\n11";
 array<String^>^ arrstr = Regex::Split(str1, "\r\n");
 List<String^>^ liststr = gcnew List<String^>((Generic::IEnumerable<String^>^)arrstr);
 liststr->Clear();
然后再进行添加
liststr->Add("AABB");
如何直接,初始化一个“空”List<String^>^ liststr。。。。

[此贴子已经被作者于2023-3-14 15:48编辑过]

2 回复
#2
追梦人zmrghy2023-03-14 15:43
for (short i = 0; i < liststr->Count; i++)
        {
            String^ Samples = liststr[i];
            for (short j = liststr->Count - 1; j > 0; j--)
                if (ReferenceEquals(Samples, liststr[j]))
                    liststr->RemoveAt(j);
        }

当j=i 时,Samples = liststr[i]
liststr[i] 为什么没有被删除???


使用for (short j = liststr->Count - 1; j > i; j--)
为什么一个元素,也没删除。。。。
#3
追梦人zmrghy2023-03-14 15:46
删除List中重复的元素,有没有现成的方法(成员函数)。
1