0

重複の可能性:
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 を追加したくありません。しかし、機能を達成するために私が書いたこの可能性のある部分は、望ましい結果を与えていません

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

3 に答える 3

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);
    }
于 2012-05-25T16:54:42.257 に答える
1

やっと自力で解決..

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

rev.ToString()asを変更し、new string(rev)現在は正常に動作しています。私が望むものは達成されます。助けてくれてどうもありがとう

于 2012-05-25T17:08:58.230 に答える
0

チェックしたいのはリバースだけですか?1 つのアプローチは、結果を正規化して、比較する前にソート順などにすることです。したがって、比較する前に 132 と 213 の両方を 123 に変換します。

于 2012-05-25T16:41:15.617 に答える