المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : كيفية حذف العناصر المتشابهة في مصفوفة ؟


عبد الهادي بهاب
16-01-2017, 05:05 PM
السلام عليكم ورحمة الله وبركاته
عندي مصفوفة تحتوي على الكثير من العناصر
بعضها متشابه
اريد ان احذف المكرر منها

مثلا ايام الاسبوع
Days = {"ee","ty","fd","ee","sd","gb","gh","re","gh","fd","gh"}

شكرا للاخوة على التواصل معناو المتابعة

ثامر أبو بلقيس
16-01-2017, 06:42 PM
السلام عليكم ورحمة الله وبركاته
items = {"ee","ty","fd","ee","sd","gb","gh","re","gh","fd" ,"gh"}
flags = {}
t =""
for i=1,table.getn(items) do
if not flags[items[i]] then
io.write(' ' .. items[i])
flags[items[i]] = true
t = t .. items[i]..","
end
end
result = Dialog.Message("Notice",t);

ثامر أبو بلقيس
16-01-2017, 06:59 PM
أو
tblNames = {"ee","ty","fd","ee","sd","gb","gh","re","gh","fd" ,"gh"}


local sResult = ""
local sNames = table.concat(tblNames,"%|%")
for i = 1, #tblNames do
local _,n = string.gsub(sNames,tblNames[i],"")
local sline = string.format("%s ",tblNames[i],n)
local _,d = string.gsub(sResult,sline,"")
if (n > 1) then
sResult = sResult .. sline.. "\r\n"
end
end
Dialog.Message("Notice", sResult);

ثامر أبو بلقيس
16-01-2017, 07:02 PM
في الكود الثاني لاشارة المتراجحة > دور كبير في التحكم في عناصر الظهور :abc_152:

غير فيها و لاحظ

عبد الهادي بهاب
16-01-2017, 09:03 PM
السلام عليكم ورحمة الله وبركاته
items = {"ee","ty","fd","ee","sd","gb","gh","re","gh","fd" ,"gh"}
flags = {}
t =""
for i=1,table.getn(items) do
if not flags[items[i]] then
io.write(' ' .. Items[i])
flags[items[i]] = true
t = t .. Items[i]..","
end
end
result = dialog.message("notice",t);

السلام عليكم
شكرا جزيلا على المود الجميل ساحاول ان افهمه جيدا
-----------------
و بدلك اكتملت المرحلة الاخيرة من حل التمرين في استراحة البلاي .......تمرين العمليات .......
ساضع ملف تنفيدي ....ان كان فعلا طبعا ساضع الكود و الا فساظل احاول

المـهاجر
19-01-2017, 04:30 AM
لو كنت انت من قمت بملئ المصفوفة بواسطة كود
فربما فاتك السؤال الصحيح هنا و هو :-
" كيف يمكننى منع ادخال عنصر مكرر للمصفوفة من الاساس ؟؟"

هذه تكون اسهل و أسرع من اضاعة الجهد فى
ادخال العناصر بكثافة للمصفوفة >>>> استهلاك حاد للذاكرة
ثم البحث عن المكرر >>>>> استهلاك لطاقة المعالجة
ثم مسحه >>>>>> استهلاك للسرعة
استهلاك غير مبرر لطاقة البرمجة و المعالج و السرعة معا
الروتين الصحيح اهم من الكود الصحيح

Haitham.2012
19-01-2017, 10:48 AM
حقيقة لا اعتقد ان يكون الامر مرهق للمعالج الا اذا كان العدد داخل المصفوفه كبير جدا .. وعملية ان تقوم بمسح المتكرر بعد ما تنتهي من ادخال كل العناصر او انك تمنع من الاساس ادخال العنصر المتكرر تحتاج نفس الامر هو البحث .. عموما جرب هذا الكود ممكن تستخلص منه ما يفيدك


if a == nil then

a = {"1" , "2" , "3" , "4" , "5"}

end


enter = Dialog.Input("Enter Data", "Your answer:", "", MB_ICONQUESTION);

found = false

for x,y in pairs(a) do

if enter == y then

found = true

end

end


if found == true then

Dialog.Message("Notice", "العنصر موجود", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

else

Table.Insert(a, 1, enter);

Dialog.Message("Notice", "تم", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);

end

المـهاجر
19-01-2017, 12:57 PM
فعلا ما تفضلت بذكره صحيح و فعلا الكود الذى تفضلت بطرحه لا يناسب سوى المصفوفات صغيرة الحجم
و لا يصح استخدامه ابدا مع المصفوفات كبيرة الحجم

عبد الهادي بهاب
19-01-2017, 07:04 PM
لو كنت انت من قمت بملئ المصفوفة بواسطة كود
فربما فاتك السؤال الصحيح هنا و هو :-
" كيف يمكننى منع ادخال عنصر مكرر للمصفوفة من الاساس ؟؟"

هذه تكون اسهل و أسرع من اضاعة الجهد فى
ادخال العناصر بكثافة للمصفوفة >>>> استهلاك حاد للذاكرة
ثم البحث عن المكرر >>>>> استهلاك لطاقة المعالجة
ثم مسحه >>>>>> استهلاك للسرعة
استهلاك غير مبرر لطاقة البرمجة و المعالج و السرعة معا
الروتين الصحيح اهم من الكود الصحيح

صحيح استاذ و فهمت المقصود من خلال طرحك للتمرين
وسنحاول جاهدين و قد لا نعد بشيء

عبد الهادي بهاب
19-01-2017, 07:05 PM
حقيقة لا اعتقد ان يكون الامر مرهق للمعالج الا اذا كان العدد داخل المصفوفه كبير جدا .. وعملية ان تقوم بمسح المتكرر بعد ما تنتهي من ادخال كل العناصر او انك تمنع من الاساس ادخال العنصر المتكرر تحتاج نفس الامر هو البحث .. عموما جرب هذا الكود ممكن تستخلص منه ما يفيدك


if a == nil then

a = {"1" , "2" , "3" , "4" , "5"}

end


enter = dialog.input("enter data", "your answer:", "", mb_iconquestion);

found = false

for x,y in pairs(a) do

if enter == y then

found = true

end

end


if found == true then

dialog.message("notice", "العنصر موجود", mb_ok, mb_iconinformation, mb_defbutton1);

else

table.insert(a, 1, enter);

dialog.message("notice", "تم", mb_ok, mb_iconinformation, mb_defbutton1);

end

شكرا استاذ هيثم على الكود بارك الله فيكم
نجعله مباشرة حيز الخدمة
ربي يحفظكم

Haitham.2012
19-01-2017, 08:22 PM
شكرا استاذ هيثم على الكود بارك الله فيكم
نجعله مباشرة حيز الخدمة
ربي يحفظكم


ربنا يكرمك اخي الكريم .. شكرا لك حبيبي