رفتن به مطلب
  • 0

ایجاد یک لیست از اعداد بدون تکرار


arastooms

سوال

سلام به همه اساتید عزیز 
یک سری اعداد دارم که داخلش خیلی تکراری هست برای مثال 

55,23,55,6,89,55,6,23,1,1,124,99,55,1,8,1,8,8,8,,0

این اعداد رو از دیتابیس میخونم و میدم به یه لیست 
ولی میخام اگر این عدد در لیست هست از قبل دیگه تکراری ننویسه و بدون تکرار در لیست ذخیره بشه
به اینصورت 

8,1,55,99,124,23,6,89,0

ممنون میشم راهنمایی بفرمایید 
با تشکر

لینک ارسال
به اشتراک گذاری در سایت های دیگر

3 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در 35 دقیقه قبل، arastooms گفته است :

سلام سپاس از راهنمایی 
خودم الان دارم از این روش استفاده میکنم 
میخاستم ببینم راه منطقی تر هم هست چون به نظر نمیاد روشمنطقی باشه !!
در هر صورت از راهنمایی شما تشکر میکنم
 

آقا ارسطو یه راه دیگه هم الان به ذهنم رسید که سرعتش خیلی خیلی بیشتر از روشی هست که گفتم اما در صورتیه که بازه ی اعدادتون مشخص باشه (یعنی بزرگترین و کوچکترین عددتون رو بدونین که ممکنه حداکثر و حداقل چند باشن) و این بازه خیلی بزرگ نباشه چون هر چقدر بازه بزرگتر باشه مقدار رمی هم که از سیستم مصرف میشه بیشتره  :

 

فرض می کنیم اعدادتون توی بازه ی [0,65536] باشن :

Private InputInts() As Int = Array As Int(55,23,55,6,89,55,6,23,1,1,124,99,55,1,8,1,8,8,8,0)
	Private SortTool(65536) As Byte
	For i1 = 0 To InputInts.Length-1
		SortTool(InputInts(i1)-1) = 1
	Next
	InputInts = Null
	Private List1 As List
	List1.Initialize
	For i2 = 0 To SortTool.Length-1
		If SortTool(i2) = 1 Then
			List1.Add((i2+1))
		End If
	Next
	SortTool = Null

 که در این مثال  اعداد غیر تکراری در List1 ریخته میشن و چون آرایه SortTool از جنس بایت هست و اندازه اون 65536 هست پس مقدار رم زیادی هم مصرف نمیشه (فقط 64 کیلوبایت =>  65536/1024 = 64KB).

مورد دیگه ای بود در خدمتم ♥

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

برای این کار فعلا دو روش ساده به نظرم می رسه : یکی استفاده از List و یکی استفاده از Map ؛ که توی این مورد به نظر من باید از Map استفاده کنین چون اگه اشتباه نکنم جستجو توی Map باینری هست اما جستجو توی list خطی هست ، به خاطر همین جستجو توی Map سرعتش خیلی بیشتر از list هست ، البته این تفاوت سرعت توی محاسبات سنگین و عملیات های طولانی احساس میشه : 

 

Private InputInts() As Int = Array As Int(55,23,55,6,89,55,6,23,1,1,124,99,55,1,8,1,8,8,8,0)
	Private Map1 As Map
	Map1.Initialize
	For i1 = 0 To InputInts.Length-1
		If Map1.ContainsKey(InputInts(i1)) = False Then
			Map1.Put(InputInts(i1),Null)
		End If
	Next

 

اگرم نیاز به بود که حتما اعداد غیر تکراری رو در لیست داشته باشین می تونین بعد از عملیات بالا ، تمام اعداد موجود در Map را در List بریزید : 

Private List1 As List
	List1.Initialize
	For Each keyInt As Int In Map1.Keys
		List1.Add(keyInt)
		Log("keyInt : "&keyInt)
	Next
	Map1.Initialize

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 9 دقیقه قبل، hosseinz501 گفته است :

سلام 

برای این کار می تونین فعلا دو روش ساده به نظرم می رسه : یکی استفاده از List و یکی استفاده از Map ؛ که توی این مورد به نظر من باید از Map استفاده کنین چون اگه اشتباه نکنم جستجو توی Map باینری هست اما جستجو توی list خطی هست ، به خاطر همین جستجو توی Map سرعتش خیلی بیشتر از list هست ، البته این تفاوت سرعت توی محاسبات سنگین و عملیات های طولانی احساس میشه : 

 


Private InputInts() As Int = Array As Int(55,23,55,6,89,55,6,23,1,1,124,99,55,1,8,1,8,8,8,0)
	Private Map1 As Map
	Map1.Initialize
	For i1 = 0 To InputInts.Length-1
		If Map1.ContainsKey(InputInts(i1)) = False Then
			Map1.Put(InputInts(i1),Null)
		End If
	Next

 

اگرم نیاز به بود که حتما اعداد غیر تکراری رو در لیست داشته باشین می تونین بعد از عملیات بالا ، تمام اعداد موجود در Map را در List بریزید : 


Private List1 As List
	List1.Initialize
	For Each keyInt As Int In Map1.Keys
		List1.Add(keyInt)
		Log("keyInt : "&keyInt)
	Next
	Map1.Initialize

 

سلام سپاس از راهنمایی 
خودم الان دارم از این روش استفاده میکنم 
میخاستم ببینم راه منطقی تر هم هست چون به نظر نمیاد روشمنطقی باشه !!
در هر صورت از راهنمایی شما تشکر میکنم
 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...