在List中查找项目是否在C#中出现多次

时间:2015-01-31 12:08:46

标签: c# arrays list encryption position

除了问题:Get List<> element position in c# using LINQ

首先,让我解释一下为什么我做我做的事情:)

我试图将字符串加密成单行代码,该代码保存字符串中字母的使用次数以及字符的位置。通过这种方法,我能够解密代码并再次获得(再现)全文。让我们说myString是&#34;你今天怎么样&#34;。我会像加密一样对它进行加密 O3 [1,9,13],&#34; &#34; 3 [3,7,11],A2 [4,15],Y2 [9,17],H1 [0],W1 [2]中,R 1 [5],E1 [6],U1 [10 ],T1 [12],D1 [14],?[18]

我知道这看起来很奇怪,但考虑一下像电子书这样的大字符串。这可以处理一行或两行中的所有文本。

加密不是关于安全性,而是关于在较小的空间中保存大数据。

在我的代码中,我可以将字符串转换为列表,计算字母的使用次数,但是当字母出现不止一次时我无法定义字母的位置。

private void btnKoda_Click(object sender, EventArgs e)
    {
        var yazi = txtYazi.Text;
        List<char> liste = yazi.ToList();
        List<string> tut = new List<string>();

        foreach (char harf in liste)
        {
            for (int i = 0; i < liste.Count; i++)
            {
                char ekle = liste[i];
                tut.Add(ekle.ToString());
            }

            foreach (var karakter in tut)
            {
                txtKod.Text += karakter;
            }

            // holds statics
            var istatistik =
                from c in tut
                group c by c into g
                select new { g.Key, say = g.Count() };
            var enCok =
                from giris in istatistik
                orderby giris.say descending
                select giris;
            foreach (var giris in enCok)
            {
                txtHarfler.Text += string.Format("{0}: {1}\r\n", giris.Key, giris.say);
            }

            break;

        }

1 个答案:

答案 0 :(得分:0)

不确定您的代码中发生了什么,但这是我将如何做的:

    private void button1_Click(object sender, EventArgs e)
    {
        Dictionary<Char, Encoding> dct = new Dictionary<char, Encoding>();

        string data = "How are you today";
        for(int i = 0; i < data.Length; i++)
        {
            Char C = data[i];
            if (!dct.ContainsKey(C))
            {
                dct.Add(C, new Encoding(C));
            }
            dct[C].AddOccurence(i);
        }

        StringBuilder SB = new StringBuilder();
        foreach(Encoding enc in dct.Values)
        {
            if (SB.Length == 0)
            {
                SB.Append(enc.ToString());
            }
            else
            {
                SB.Append("," + enc.ToString());
            }
        }

        Console.WriteLine(SB.ToString());
    }

这是编码类:

    public class Encoding
    {

        private Char _C;
        private List<int> _Positions;

        private Encoding() {}

        public Encoding(Char C)
        {
            this._C = C;
            this._Positions = new List<int>();
        }

        public Char Character
        {
            get
            {
                return _C;
            }
        }

        public int Count
        {
            get
            {
                return _Positions.Count;
            }
        }

        public int[] Occurences
        {
            get
            {
                return _Positions.ToArray();
            }
        }

        public override string ToString()
        {
            string[] values = Array.ConvertAll(this.Occurences.ToArray(), x => x.ToString());
            return this.Character.ToString() + this.Count.ToString() + "[" + String.Join(",", values) + "]";
        }

        public void AddOccurence(int position)
        {
            this._Positions.Add(position);
        }

    }

原始字符串:

How are you today

输出:

H1[0],o3[1,9,13],w1[2], 3[3,7,11],a2[4,15],r1[5],e1[6],y2[8,16],u1[10],t1[12],d1[14]