除了问题: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;
}
答案 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]