从此C#程序中删除元素

时间:2012-05-25 15:56:16

标签: c# .net

  

可能重复:
  Any chance to get unique records using Linq (C#)?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WaysOf100
{
class WaysOf100Test
{
    static void Main(string[] args)
    {
        WaysOf100 test= new WaysOf100();
        test.Go();
        test.EliminateDuplicates();
    }
}

class WaysOf100
{        
    List<string> results = new List<string>();             

    public void Go()
    {
        int num = 5, temp=0;//to store the intermediate difference
        for (int i = 1; i <num; i++)
        {
            temp = num - i;
            for (int j = 1; j <= temp; j++)
            {
                if (temp % j == 0)
                {   
                    //Console.Write(i + " ");
                    string text = "";                        
                    text = i.ToString();                        
                    for (int k = 1; k <= (temp / j); k++)
                    {
                        //Console.Write(j + " ");  
                        text += j.ToString();
                    }
                    char[] rev = text.ToCharArray();
                    Array.Reverse(rev);                       
                    if(!(results.Contains(rev.ToString())))
                        results.Add(text);                        

                }
            }                
        }
    }

    public void EliminateDuplicates()
    {            
        //To eliminate the duplicates   

        /*for (int i = 0; i < results.Count; i++)
        {

            for (int j = 0; j < results.Count; j++)
            {

                if (!(results[i].Equals(results[j])))
                {
                    char [] rev = results[j].ToCharArray();
                    Array.Reverse(rev);                        
                    if (results[i]==rev.ToString())
                        results.Remove(rev.ToString());
                }                                       
            }
        }*/

        foreach (var result in results)
        {
           Console.WriteLine(result);
        }
        Console.WriteLine("Total number of elements is :{0}",results.Count);
    }
}

}

到目前为止的结果是     11111     122     14     2111     23     311     32     41

这就是我想要的简短:41的反向是14和14已经存在于列表中所以我不想添加41.类似地,32的反向是23也存在因此32不应该添加。但是,我为实现这一功能而编写的这篇文章并没有给出理想的结果

if(!(results.Contains(rev.ToString())))
      results.Add(text);

3 个答案:

答案 0 :(得分:1)

您遇到的问题是rev.ToString()'返回"System.Char[]"而不是您想要/期望的字符串值。为了您的逻辑,请尝试以下方法:

    public void EliminateDuplicates()
    {
        //Eliminate the duplicates    

        for (int i = 0; i < results.Count; i++)
        {
            for (int j = 0; j < results.Count; j++)
            {
                if (!(results[i].Equals(results[j])))
                {
                    char[] rev = results[j].ToCharArray();
                    char[] forward = results[i].ToCharArray();
                    Array.Reverse(rev);
                    bool bEqual = true;
                    for( int n = 0 ; n < results[j].Length && true == bEqual ; n++ )
                    {
                        if( rev[n] != forward[n] )
                        {
                            bEqual = false;
                        }
                    }
                    if( true == bEqual)
                        results.Remove(results[j] );
                }
            }
        }

        foreach (var result in results)
        {
            Console.WriteLine(result);
        }
        Console.WriteLine("Total number of elements is : {0} ", results.Count);
    }

答案 1 :(得分:1)

终于解决了..

if (!(results.Contains(new string(rev))))
    results.Add(text);

rev.ToString()更改为new string(rev)并立即正常工作。我想要的是什么。非常感谢帮助人员

答案 2 :(得分:0)

反向是您要检查的唯一案例吗?一种方法是将结果标准化为例如比较前的排序顺序。因此在比较之前将132和213转换为123。