PDA

View Full Version : شمارش يك كاراكتر خاص



mahdikoochooloo
دوشنبه 17 تیر 1392, 23:23 عصر
به نام خدا
دوستان سلام
به اين كد دقت كنيد
oneRecord.Where(c => c == ',').Count()
توش مياد تعداد كاراكتر كاما را مي شماره اما خيلي هزينش زياده و ايتريشن اون در اجرا خيلي زياده
دوستان روش بهتري سراغ ندارن؟

با تشكر

CsharpNevisi
دوشنبه 17 تیر 1392, 23:29 عصر
این به دردت میخوره ؟؟

int c;
private void button1_Click(object sender, EventArgs e)
{
string a = "fdd,fg,dfgdfgfd,g,fd,g,dfg,d";
for (int i = 0; i <= a.Length - 1; i++)
{
if (a.Substring(i, 1) == ",")
{
c++;
}
}
MessageBox.Show(c.ToString());
}

مهرداد صفا
سه شنبه 18 تیر 1392, 07:26 صبح
باسلام.


foreach(Char c in word)
if(c=='x') count++;

tooraj_azizi_1035
سه شنبه 18 تیر 1392, 17:46 عصر
قبل از Where عبارت AsParallel رو تایپ کن:
AsParallel().Where

مهرداد صفا
سه شنبه 18 تیر 1392, 19:36 عصر
قبل از Where عبارت AsParallel رو تایپ کن:
AsParallel().Where

با سلام.
همونطور که تست زیر مشخص کرده استفاده از حلقه سه برابر از Enumerable و حدودا شش برابر از ParellelEnumerable سریعتر صورت گرفته:

//in the name of god
//صل الله علی محمد و آله


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

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
char character = 'a';
string text = new string(character, 100000000);
int count = 0;
System.Diagnostics.Stopwatch stopWatch;
Console.WriteLine("start searching by IEnumerable.Where...");
stopWatch = System.Diagnostics.Stopwatch.StartNew();
count = text.Where(c => c == character).Count();
stopWatch.Stop();
Console.WriteLine(count.ToString() + " matches find in " + stopWatch.ElapsedMilliseconds.ToString() + " milliseconds.");
//----------------------------
count = 0;
Console.WriteLine("start searching by for...");
stopWatch.Restart();
for (int i = 0; i < 100000000; i++)
if (text[i] == character) count++;
stopWatch.Stop();
Console.WriteLine(count.ToString() + " matches find in " + stopWatch.ElapsedMilliseconds.ToString() + " milliseconds.");
//----------------------------

count = 0;
Console.WriteLine("start searching by ParallelEnumerable.Where...");
stopWatch.Restart();
count = text.AsParallel().Where(c => c == character).Count();

stopWatch.Stop();
Console.WriteLine(count.ToString() + " matches find in " + stopWatch.ElapsedMilliseconds.ToString() + " milliseconds.");

Console.ReadKey();
}
}
}


نتیجه:


//run with Control+f5 keys
start searching by IEnumerable.Where...
100000000 matches find in 1765 milliseconds.
start searching by for...
100000000 matches find in 593 milliseconds.
start searching by ParallelEnumerable.Where...
100000000 matches find in 2444 milliseconds.
Press any key to continue . . .