بالطبع، سأكمل المقال لشرح بعض النقاط الإضافية وتوضيح كيفية تطبيق الحل المقترح بشكل أكثر تفصيلاً.
في البداية، دعنا نتحدث عن الكود الذي تم توفيره في jsfiddle. يوجد بعض القطع المهمة في الكود، ومنها العنصر الذي يمثل قائمة السحب الانسدادية. قمت بإضافة خاصية disabled إلى هذا العنصر، وهي الطريقة التقليدية لجعل القائمة غير قابلة للتغيير في HTML.
ومع ذلك، كما ذكرت سابقًا، استخدام disabled يمنع القائمة تمامًا من الاستجابة لأي تفاعل، بما في ذلك عرض الخيارات عند النقر عليها. لذا، حلنا المقترح يعتمد على استخدام CSS بدلاً من ذلك لتحقيق الهدف المطلوب.
عند استخدام الكلاس .readonly كما تم توضيحه، يتم تطبيق الأنماط التي تجعل القائمة الانسدادية غير قابلة للتحديد. تعتمد هذه الأنماط على استخدام pointer-events: none; الذي يمنع التفاعل مع القائمة، وبالتالي تجعلها غير قابلة للتغيير.
إذا كنت ترغب في توسيع المقال، يمكنك تضمين أمثلة إضافية أو تفسيرات أعمق حول الاستخدامات الأخرى لـ CSS في تخصيص العناصر HTML. يمكنك أيضًا استعراض الأساليب البديلة لجعل العناصر غير قابلة للتحرير والاستجابة بشكل مختلف لاحتياجات التصميم المحددة.
05/04/2024 2
بحث عن الأعداد الزوجية في Lisp
في لغة Lisp، يمكنك تحقيق هذا الهدف باستخدام مجموعة من الدوال والتعبيرات المنطقية. سنقوم بتعريف دالة تقوم بتمرير القائمة المعطاة، ومن ثم البحث عن الأعداد الزوجية فيها وإضافتها إلى قائمة جديدة، وأخيراً طباعة هذه القائمة.
لنقم أولاً بتعريف الدالة:
lispCopy code(defun find-even-numbers (lst)
(let ((even-list '())) ; إنشاء قائمة جديدة لتخزين الأعداد الزوجية
(dolist (elem lst) ; البدء في المرور على القائمة المعطاة
(if (and (numberp elem) ; التأكد من أن العنصر هو رقم
(evenp elem)) ; وأنه عدد زوجي
(push elem even-list))) ; في حالة كان العنصر رقماً زوجياً، قم بإضافته إلى القائمة الجديدة
even-list)) ; قم بإرجاع القائمة الجديدة للأعداد الزوجية
ثم يمكنك استخدام هذه الدالة لإيجاد الأعداد الزوجية وطباعتها كما يلي:
lispCopy code(defun print-even-numbers (lst)
(format t "~&The even numbers are: ~a" (find-even-numbers lst)))
(print-even-numbers '(3 b 6 7 8)) ; ستقوم هذه الخطوة بطباعة "The even numbers are: (6 8)"
في هذا المثال، قمنا بتعريف دالة باسم find-even-numbers التي تقوم بتمرير القائمة والبحث عن الأعداد الزوجية فيها وإضافتها إلى قائمة جديدة، ثم قمنا بتعريف دالة جديدة باسم print-even-numbers تستخدم الدالة السابقة لإيجاد الأعداد الزوجية وطباعتها.
المزيد من المعلومات
بالطبع، سأقوم بتكملة المقال. سنقوم بتوسيع المقال لشرح الدوال المستخدمة بشكل أكبر وتوضيح كيفية عملها بالتفصيل.
في لغة Lisp، توفر العديد من الدوال والتعبيرات المنطقية للتعامل مع القوائم والبيانات بشكل فعال. في هذا المثال، سنقوم بإنشاء دالة تقوم بالبحث عن الأعداد الزوجية في قائمة معطاة وإضافتها إلى قائمة جديدة.
أولاً، سنقوم بتعريف الدالة find-even-numbers التي ستأخذ قائمة كمعامل وستقوم بإرجاع قائمة تحتوي على الأعداد الزوجية فقط. في هذه الدالة، سنستخدم dolist لتمرير على القائمة واختبار كل عنصر ما إذا كان رقماً زوجياً أم لا باستخدام evenp.
الآن، سنكمل المقال بتوضيح كيفية استخدام هذه الدالة لطباعة الأعداد الزوجية من قائمة محددة. لهذا الغرض، سنقوم بإنشاء دالة print-even-numbers التي تقوم بطباعة القائمة التي تم إرجاعها من قبل find-even-numbers.
بعد تعريف الدالتين، يمكننا استدعاء print-even-numbers مع القائمة المطلوبة لنجد الأعداد الزوجية ونقوم بطباعتها.
هكذا، يتم إكمال المهمة بنجاح، والنتيجة المتوقعة هي طباعة الأعداد الزوجية من القائمة المعطاة، التي في هذا المثال هي (3 b 6 7 8) والتي ينبغي أن تطبع (6 8).
هذا يوفر لنا أسلوباً فعالاً للعثور على الأعداد الزوجية في قائمة Lisp وطباعتها، مما يظهر القوة والمرونة التي توفرها Lisp في التعامل مع البيانات.
باستخدام هذه الدوال والتعبيرات في Lisp، يمكن للمبرمجين تنفيذ العديد من العمليات على القوائم بشكل فعال وسلس، مما يزيد من قوة هذه اللغة في مجالات مثل معالجة البيانات وتحليلها ومعالجة النصوص وغيرها من التطبيقات.
بهذا، يكتمل شرح عملية البحث عن الأعداد الزوجية في قائمة Lisp وطباعتها، مما يعزز فهمنا لقوة هذه اللغة ومرونتها في التعامل مع البيانات.
03/04/2024 4
تغيير لون خلفية القائمة النشطة
لتغيير لون خلفية القائمة الثانية من القائمتين التي تحمل الفئة المحددة “active”، يمكنك استخدام المُحدد التالي:
cssCopy codeul.dropdown-menu li.active {
background-color: #e9124a !important;
}
هذا الكود يُغيّر لون خلفية العناصر
التي تحمل الفئة “active” داخل القوائم
التي تحمل الفئة “dropdown-menu”. استخدمت !important هنا لضمان تطبيق النمط حتى على الرغم من وجود أنماط CSS أخرى قد تُطبق على العناصر نفسها.
لتحقيق هذا الأمر، يجب عليك وضع هذا القطعة من الكود في ملف CSS الخاص بموقعك أو وحدة النمط التابعة للصفحة. يُمكنك أيضاً استخدام الأنماط الوضعية المضمّنة داخل علامة
</code> داخل <code><head></code> في صفحتك الHTML.</p>
<p>أتمنى أن يكون هذا الشرح مفيداً. في حال كان لديك أي استفسار إضافي، فلا تتردد في طرحه.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="05198e21-601e-4b6b-b4d5-96bf7cf8bb22" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>في السياق الحالي، يمكن أن نفهم أهمية تغيير لون خلفية القائمة الثانية وتطبيق النمط المناسب على العناصر ذات الفئة "active". يُعد تغيير الخلفية لهذه العناصر من العمليات الشائعة في تصميم وتطوير مواقع الويب، حيث يساعد في تحسين تجربة المستخدم وجعل العناصر النشطة أكثر بروزاً وتميزاً.</p>
<p>عند تحديد العنصر الثاني في القائمة وتغيير لون خلفيته، يتم إبرازه بشكل أكبر ليتميز عن العناصر الأخرى ويسهل على المستخدم التعرف على الموضوع أو الصفحة التي يتم تمثيلها بواسطته. وبالتالي، يزيد تطبيق أنماط CSS المخصصة مثل هذه من جاذبية الموقع ويُساهم في جعله أكثر جاذبية وسهولة استخدام.</p>
<p>لاحظ أن استخدام <code>!important</code> يعتبر ممارسة محفوفة بالمخاطر ويُفضل تجنبه إلا في الحالات الضرورية. إذا كنت تواجه صعوبة في تطبيق النمط بدون <code>!important</code>، فمن المستحسن مراجعة ترتيب أنماط CSS الخاصة بك وتنظيمها بشكل أفضل لتجنب الحاجة إلى استخدام هذا المفتاح.</p>
<p>وفي النهاية، يمكن أن يساعد تغيير لون خلفية العناصر النشطة في القوائم على إبراز المحتوى المهم وتعزيز تجربة المستخدم، مما يساهم في تعزيز فهم المحتوى وسهولة التنقل عبر الموقع.</p>
</div>
</div>
</div>
</li>
<li class="post-item stream-item stream-item-between stream-item-between-2"><div class="post-item-inner"><div class="stream-item-size" style="">
<div class="stream-item stream-item-in-post stream-item-in-post-1"><div>
<!-- defults -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-3293364314201893"
data-ad-slot="2303082872"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div></div></li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">02/04/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 4 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%aa%d9%82%d9%86%d9%8a%d8%a9-%d8%aa%d8%ad%d9%85%d9%8a%d9%84-%d8%a7%d9%84%d8%aa%d8%af%d9%81%d9%82-%d9%84%d9%82%d8%a7%d8%a6%d9%85%d8%a9-android-listview/">تقنية تحميل التدفق لقائمة Android ListView</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="e8f8b494-e262-4b31-a968-f6ac5bf8631c" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بالتأكيد، فهم التحميل التدفقي (Lazy Loading) هو حلاً مثالياً لتلك المشكلة. يسمح التحميل التدفقي بتحميل البيانات تدريجياً أثناء تمرير المستخدم لأسفل القائمة، بدلاً من تحميل كل البيانات دفعة واحدة وهذا ما يؤدي إلى زمن تحميل طويل.</p>
<p>لتطبيق التحميل التدفقي في قائمة Android ListView، يمكنك استخدام تقنية التمرير اللامتناهي (Infinite Scrolling). هذا يعني أنك ببساطة تحمل عدداً معيناً من العناصر من الخادم في كل مرة تصل فيها إلى نهاية القائمة، ثم تحمل المزيد عندما يتم التمرير إلى الأسفل.</p>
<p>لتنفيذ هذا، يمكنك اتباع الخطوات التالية:</p>
<ol>
<li>قم بتعيين متغير لتتبع عدد العناصر التي تم تحميلها بالفعل.</li>
<li>عندما يتم التمرير إلى نهاية القائمة، اطلب البيانات الجديدة من الخادم.</li>
<li>بعد استلام البيانات، أضفها إلى قائمة العناصر الموجودة بالفعل وأخبر محول البيانات (ArrayAdapter) بالتحديث.</li>
<li>قم بزيادة عدد العناصر المحملة بالفعل بمقدار عدد العناصر الجديدة.</li>
<li>يكرر هذا العملية مع كل مرة يتم فيها التمرير إلى نهاية القائمة.</li>
</ol>
<p>بتطبيق هذه الخطوات، ستلاحظ تحسناً كبيراً في أداء التطبيق حيث لن تكون بحاجة إلى انتظار تحميل كل البيانات مقدماً. عوضاً عن ذلك، ستحمل البيانات بما يكفي للعرض الفوري، مما يحسن تجربة المستخدم بشكل كبير.</p>
<p>باستخدام هذا النهج، سيكون لديك تطبيق يتمتع بأداء أفضل وزمن تحميل أقل، مما يعزز من رضا المستخدم وتفاعله مع التطبيق الخاص بك.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="2ec81cf0-c4fb-4af9-9b48-b693bfcf9a4a" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بالتأكيد، هذا النهج يعد بديلاً فعالاً لتحسين أداء تطبيقك وتجربة مستخدمك. ومع ذلك، هناك بعض النقاط التي يجب أخذها في الاعتبار عند تنفيذ التحميل التدفقي:</p>
<ol>
<li>
<p><strong>إدارة الذاكرة:</strong> يجب أن تكون حذراً في كيفية إدارة الذاكرة أثناء تحميل البيانات التدفقية. قد تواجه تحديات فيما يتعلق بتخزين وتحميل كميات كبيرة من البيانات بما يكفي لعدة عناصر في ListView. يمكنك استخدام تقنيات مثل تخزين البيانات المؤقتة في قاعدة بيانات SQLite أو تحميل البيانات بشكل مؤقت في الذاكرة وحذفها عندما لا تكون مطلوبة بعد الآن.</p>
</li>
<li>
<p><strong>تحسين الأداء:</strong> يمكن أن يؤدي تحميل البيانات التدفقية إلى تحسين أداء التطبيق بشكل كبير، ولكن يجب مراعاة الأداء أثناء عملية التحميل نفسها. يمكن استخدام تقنيات الحمل التدفقي المتقدمة مثل استخدام تقنية التحميل المسبق (Prefetching) لتحميل البيانات التالية بشكل مسبق قبل وصول المستخدم إلى نهاية القائمة.</p>
</li>
<li>
<p><strong>معالجة الأخطاء:</strong> يجب أن تكون مستعداً لمعالجة الأخطاء التي قد تحدث أثناء عملية التحميل التدفقي، مثل فشل الاتصال بالخادم أو توقف الشبكة. يمكن استخدام آليات إعادة المحاولة أو عرض رسائل الخطأ للمستخدم للإشارة إلى أن هناك مشكلة في التحميل.</p>
</li>
</ol>
<p>باختصار، يعد تحميل البيانات التدفقية وتنفيذ تقنية التمرير اللامتناهي إجراءً فعّالاً لتحسين أداء تطبيقك وتجربة مستخدميك. من خلال الاهتمام بالنقاط المذكورة أعلاه، يمكنك تنفيذ هذا النهج بنجاح وتحسين تطبيقك بشكل عام.</p>
</div>
</div>
</div>
</li>
<li class="post-item stream-item stream-item-between stream-item-between-2"><div class="post-item-inner"><div class="stream-item-size" style="">
<div class="stream-item stream-item-in-post stream-item-in-post-1"><div>
<!-- defults -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-3293364314201893"
data-ad-slot="2303082872"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div></div></li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">01/04/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 2 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%a5%d8%b2%d8%a7%d9%84%d8%a9-%d8%a7%d9%84%d8%aa%d9%83%d8%b1%d8%a7%d8%b1-%d8%a7%d9%84%d9%82%d8%b5%d9%88%d9%89-%d9%88%d8%a7%d9%84%d8%a3%d8%af%d9%86%d9%89/">إزالة التكرار القصوى والأدنى</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="81b89f51-7317-4ae8-bd29-d03e30bee5ef" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>لإزالة التكرار القصوى والأدنى فقط من قائمة من الأرقام، يمكنك استخدام مجموعة من الدوال المتوفرة في لغة البايثون. بدايةً، يمكنك استخدام دالة <code>max()</code> للعثور على القيمة القصوى في القائمة ودالة <code>min()</code> للعثور على القيمة الأدنى. بعد ذلك، يمكنك استخدام دالة <code>set()</code> لإنشاء مجموعة من القيم للقائمة، وبالتالي ستتم إزالة التكرار. ومن ثم، يمكنك إعادة بناء القائمة باستخدام القيم الفريدة باستثناء القيمة القصوى والقيمة الأدنى باستخدام الدالة <code>list()</code>.</p>
<p>لتوضيح الخطوات، يمكنك استخدام الرمز التالي في لغة البايثون:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>python</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">remove_max_min_duplicates</span>(<span class="hljs-params">numbers</span>):
<span class="hljs-comment"># العثور على القيمة القصوى والقيمة الأدنى</span>
max_value = <span class="hljs-built_in">max</span>(numbers)
min_value = <span class="hljs-built_in">min</span>(numbers)
<span class="hljs-comment"># إنشاء مجموعة فريدة من القيم باستثناء القيمة القصوى والقيمة الأدنى</span>
unique_values = <span class="hljs-built_in">set</span>(numbers)
unique_values.discard(max_value)
unique_values.discard(min_value)
<span class="hljs-comment"># إعادة بناء القائمة بالقيم الفريدة</span>
result = <span class="hljs-built_in">list</span>(unique_values)
<span class="hljs-comment"># إعادة القائمة المعالجة</span>
<span class="hljs-keyword">return</span> result
<span class="hljs-comment"># مثال على استخدام الدالة</span>
numbers = [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">4</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">8</span>]
result = remove_max_min_duplicates(numbers)
<span class="hljs-built_in">print</span>(result) <span class="hljs-comment"># Output: [1, 4, 5, 6, 8]</span>
</code></div></div></pre>
<p>هذا الكود يقوم بالمطلوب بدقة، حيث يستخدم الدوال المناسبة للعثور على القيم القصوى والأدنى في القائمة ومن ثم إزالتها من القائمة النهائية التي تحتوي على القيم الفريدة فقط.</p>
<p>بالطبع، هناك طرق أخرى لتحقيق نفس الهدف، ولكن استخدام الدوال المدمجة في لغة البايثون مثل <code>max()</code> و <code>min()</code> و <code>set()</code> يجعل العملية أكثر فعالية وبساطة.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="b3336144-2c2c-4033-89a9-7d6e0a134d3d" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بالطبع، يمكن أن نتحدث أكثر عن هذا الموضوع ونستكشف بعض الطرق البديلة لحل المشكلة. واحدة من الطرق البديلة هي استخدام التعبيرات الشرطية (Conditional Expressions) والتي تسمح بكتابة الشروط بطريقة أكثر وضوحًا.</p>
<p>توجد طريقة أخرى تعتمد على تحديد القيمة القصوى والأدنى وإزالة جميع الحالات التي تتكرر بجوارها، وذلك باستخدام حلقة تكرار مع استخدام الدالة <code>enumerate()</code> لتتبع مواقع العناصر في القائمة.</p>
<p>إليك مثالًا على كيفية استخدام التعبيرات الشرطية لحل هذه المشكلة:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>python</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-python"><span class="hljs-keyword">def</span> <span class="hljs-title function_">remove_max_min_duplicates</span>(<span class="hljs-params">numbers</span>):
max_value = <span class="hljs-built_in">max</span>(numbers)
min_value = <span class="hljs-built_in">min</span>(numbers)
<span class="hljs-comment"># استخدام التعبيرات الشرطية لإعادة بناء القائمة</span>
result = [x <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> numbers <span class="hljs-keyword">if</span> x != max_value <span class="hljs-keyword">and</span> x != min_value]
<span class="hljs-keyword">return</span> result
<span class="hljs-comment"># مثال على استخدام الدالة</span>
numbers = [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">4</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">8</span>, <span class="hljs-number">8</span>, <span class="hljs-number">8</span>]
result = remove_max_min_duplicates(numbers)
<span class="hljs-built_in">print</span>(result) <span class="hljs-comment"># Output: [1, 4, 5, 6, 8]</span>
</code></div></div></pre>
<p>هذا الكود يقوم بإنشاء قائمة جديدة تحتوي على القيم التي ليست القيمة القصوى ولا الأدنى في القائمة الأصلية.</p>
<p>بشكل عام، يمكن القول أن هناك العديد من الطرق لحل المشكلات في بيئة برمجة معينة، وكل طريقة لها ميزاتها وعيوبها. في حالتنا هنا، يمكن أن تعتبر الطريقة الأولى الأكثر بساطة ووضوحًا، بينما توفر الطريقة الثانية المزيد من القابلية للتعديل والتحكم بالشروط.</p>
</div>
</div>
</div>
</li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">31/03/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 3 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%aa%d8%ad%d8%af%d9%8a%d8%ab-%d8%a7%d9%84%d8%b9%d9%86%d8%b5%d8%b1-%d8%a7%d9%84%d8%a3%d8%ae%d9%8a%d8%b1-%d9%81%d9%8a-%d9%82%d8%a7%d8%a6%d9%85%d8%a9-java-2d-arraylist/">تحديث العنصر الأخير في قائمة Java 2D ArrayList</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="3fb1af8a-9271-43b3-953a-0453b376e786" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بما أنك تواجه مشكلة في تحديث قيمة العنصر الأخير في القائمة ثنائية الأبعاد (2D ArrayList) دون أن تؤثر على العناصر الأخرى في القائمة، فإن هذا يستدعي بعض التفكير والإبداع في الحلول. يبدو أن المشكلة تنشأ من عملية نقل المرجع (Reference) للعنصر الأخير وتحديثه، مما يؤدي إلى تحديث القيم في المكان الأصلي للعنصر أيضًا.</p>
<p>لحل هذه المشكلة، يمكن اتباع نهجين رئيسيين:</p>
<p>الأول، استخدام العمليات المتقدمة لإنشاء نسخة (Copy) من العنصر الأخير وتحديث النسخة بدلاً من العنصر الأصلي. هذا يضمن عدم تأثير التغييرات على العناصر الأخرى في القائمة.</p>
<p>الثاني، استخدام البناء (Builder) لإنشاء عنصر جديد بالقيم المحدثة وإضافته إلى القائمة بدلاً من تحديث العنصر الأخير.</p>
<p>سأوضح كلا النهجين بالتفصيل:</p>
<p>النهج الأول: استخدام النسخ والتحديث</p>
<ol>
<li>نقل العنصر الأخير للقائمة إلى متغير مؤقت.</li>
<li>إنشاء نسخة جديدة من هذا العنصر.</li>
<li>تحديث القيم في النسخة الجديدة.</li>
<li>إضافة النسخة الجديدة إلى نهاية القائمة.</li>
</ol>
<p>النهج الثاني: استخدام البناء</p>
<ol>
<li>إنشاء كائن جديد من العنصر باستخدام قيم العنصر الأخير.</li>
<li>تحديث قيم العنصر الجديد.</li>
<li>إضافة العنصر الجديد إلى نهاية القائمة.</li>
</ol>
<p>باستخدام أي من هذين النهجين، يمكنك تحقيق الهدف المطلوب دون التأثير على العناصر الأخرى في القائمة. تحديد النهج المناسب يعتمد على تفضيلاتك الشخصية وهيكل البرنامج الخاص بك.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="bd5a318c-1c13-4880-8354-91b82a910eab" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بالطبع، سأكمل المقال بتوسيع الشرح لكل نهج وتقديم أمثلة توضيحية.</p>
<h3>النهج الأول: استخدام النسخ والتحديث</h3>
<p>هذا النهج يتضمن إجراء الخطوات التالية:</p>
<ol>
<li>
<p><strong>نقل العنصر الأخير للقائمة إلى متغير مؤقت:</strong><br />
يتم نسخ القيم الخاصة بالعنصر الأخير في متغير مؤقت لتجنب تغيير القيم الأصلية.</p>
</li>
<li>
<p><strong>إنشاء نسخة جديدة من هذا العنصر:</strong><br />
يتم إنشاء نسخة جديدة من العنصر الأخير باستخدام القيم الموجودة في المتغير المؤقت.</p>
</li>
<li>
<p><strong>تحديث القيم في النسخة الجديدة:</strong><br />
يتم تحديث القيم في النسخة الجديدة وتعيين القيم الجديدة للمتغيرات المناسبة.</p>
</li>
<li>
<p><strong>إضافة النسخة الجديدة إلى نهاية القائمة:</strong><br />
بعد تحديث القيم في النسخة الجديدة، يتم إضافتها إلى نهاية القائمة ثنائية الأبعاد.</p>
</li>
</ol>
<p>لنقم بتوضيح هذا النهج من خلال كود Java:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>java</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-java"><span class="hljs-comment">// استيراد الحزم الضرورية</span>
<span class="hljs-keyword">import</span> java.util.ArrayList;
<span class="hljs-comment">// تعريف القائمة ثنائية الأبعاد</span>
ArrayList<ArrayList<Integer>> arrayList2D = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><ArrayList<Integer>>();
<span class="hljs-comment">// نقل العنصر الأخير إلى متغير مؤقت</span>
ArrayList<Integer> lastElement = arrayList2D.get(arrayList2D.size() - <span class="hljs-number">1</span>);
<span class="hljs-comment">// إنشاء نسخة جديدة من العنصر الأخير</span>
ArrayList<Integer> newElement = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Integer>(lastElement);
<span class="hljs-comment">// تحديث القيم في النسخة الجديدة</span>
<span class="hljs-comment">// يمكن تحديث القيم كما هو مطلوب</span>
<span class="hljs-type">int</span> <span class="hljs-variable">newX</span> <span class="hljs-operator">=</span> lastElement.get(<span class="hljs-number">0</span>) + <span class="hljs-number">1</span>;
<span class="hljs-type">int</span> <span class="hljs-variable">newY</span> <span class="hljs-operator">=</span> lastElement.get(<span class="hljs-number">1</span>) + <span class="hljs-number">1</span>;
newElement.set(<span class="hljs-number">0</span>, newX);
newElement.set(<span class="hljs-number">1</span>, newY);
<span class="hljs-comment">// إضافة النسخة الجديدة إلى نهاية القائمة</span>
arrayList2D.add(newElement);
</code></div></div></pre>
<h3>النهج الثاني: استخدام البناء</h3>
<p>هذا النهج يتضمن إجراء الخطوات التالية:</p>
<ol>
<li>
<p><strong>إنشاء كائن جديد من العنصر باستخدام قيم العنصر الأخير:</strong><br />
يتم إنشاء كائن جديد من العنصر باستخدام القيم الخاصة بالعنصر الأخير في القائمة.</p>
</li>
<li>
<p><strong>تحديث قيم العنصر الجديد:</strong><br />
يتم تحديث قيم العنصر الجديد حسب المتطلبات.</p>
</li>
<li>
<p><strong>إضافة العنصر الجديد إلى نهاية القائمة:</strong><br />
بعد تحديث القيم في العنصر الجديد، يتم إضافته إلى نهاية القائمة ثنائية الأبعاد.</p>
</li>
</ol>
<p>لنقم بتوضيح هذا النهج من خلال كود Java:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>java</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-java"><span class="hljs-comment">// إنشاء كائن جديد من العنصر باستخدام قيم العنصر الأخير</span>
ArrayList<Integer> newElement = <span class="hljs-keyword">new</span> <span class="hljs-title class_">ArrayList</span><Integer>();
ArrayList<Integer> lastElement = arrayList2D.get(arrayList2D.size() - <span class="hljs-number">1</span>);
<span class="hljs-keyword">for</span> (Integer value : lastElement) {
newElement.add(value);
}
<span class="hljs-comment">// تحديث قيم العنصر الجديد</span>
<span class="hljs-comment">// يمكن تحديث القيم كما هو مطلوب</span>
<span class="hljs-type">int</span> <span class="hljs-variable">newX</span> <span class="hljs-operator">=</span> lastElement.get(<span class="hljs-number">0</span>) + <span class="hljs-number">1</span>;
<span class="hljs-type">int</span> <span class="hljs-variable">newY</span> <span class="hljs-operator">=</span> lastElement.get(<span class="hljs-number">1</span>) + <span class="hljs-number">1</span>;
newElement.set(<span class="hljs-number">0</span>, newX);
newElement.set(<span class="hljs-number">1</span>, newY);
<span class="hljs-comment">// إضافة العنصر الجديد إلى نهاية القائمة</span>
arrayList2D.add(newElement);
</code></div></div></pre>
<h3>الاستنتاج</h3>
<p>باستخدام أحد هذين النهجين، يمكنك تحقيق هدفك في تحديث العنصر الأخير من القائمة ثنائية الأبعاد دون التأثير على العناصر الأخرى في القائمة. اختر النهج الذي يناسب حالتك بناءً على بنية ومتطلبات برنامجك.</p>
</div>
</div>
</div>
</li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">30/03/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 5 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%ad%d8%b3%d8%a7%d8%a8-%d9%85%d8%ac%d9%85%d9%88%d8%b9-%d9%82%d9%8a%d9%85-%d8%a7%d9%84%d9%83%d9%85%d9%8a%d8%a7%d8%aa-%d9%81%d9%8a-%d9%82%d8%a7%d8%a6%d9%85%d8%a9-java/">حساب مجموع قيم الكميات في قائمة Java</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="a2befea9-9a89-47aa-bc86-6863b314fc2e" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>لحساب مجموع قيم الكميات المخزنة في كائنات Java الموجودة في قائمة List، يمكنك استخدام حلقة تكرارية للانتقال عبر جميع الكائنات وجمع قيم الكميات. في حلقة التكرار، يمكنك الوصول إلى كل كائن في القائمة واستخراج قيمة الكمية من كل منها، ثم جمع هذه القيم مع بعضها البعض. إليك كيفية تنفيذ ذلك بالتفصيل:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>java</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-java"><span class="hljs-keyword">import</span> java.util.List;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title class_">Main</span> {
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title function_">main</span><span class="hljs-params">(String[] args)</span> {
<span class="hljs-comment">// قائمة الكائنات التي تحتوي على القيم التي نريد حساب مجموعها</span>
List<ExpressCheckout> expressCheckouts = <span class="hljs-comment">/* قم بتعبئة القائمة هنا */</span>;
<span class="hljs-comment">// المتغير الذي سيحتوي على مجموع الكميات</span>
<span class="hljs-type">float</span> <span class="hljs-variable">totalAmount</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;
<span class="hljs-comment">// حلقة تكرارية للانتقال عبر كل كائن في القائمة وجمع القيم</span>
<span class="hljs-keyword">for</span> (ExpressCheckout checkout : expressCheckouts) {
<span class="hljs-comment">// استخراج قيمة الكمية من كل كائن وجمعها مع المجموع الكلي</span>
totalAmount += checkout.getAmount();
}
<span class="hljs-comment">// طباعة الناتج النهائي الذي يحتوي على مجموع الكميات</span>
System.out.println(<span class="hljs-string">"Total Amount: "</span> + totalAmount);
}
}
</code></div></div></pre>
<p>في هذا الكود، قمنا بتعريف الفئة <code>Main</code> التي تحتوي على الميثود <code>main</code> كمدخل لبرنامجنا. ثم، قمنا بتعريف متغير <code>totalAmount</code> لتخزين المجموع الكلي لقيم الكميات.</p>
<p>بعد ذلك، قمنا بتكرار كل عنصر <code>ExpressCheckout</code> في القائمة <code>expressCheckouts</code>. في كل دورة، نضيف قيمة الكمية من الكائن الحالي إلى المجموع الكلي.</p>
<p>أخيرًا، نقوم بطباعة قيمة المجموع النهائي لقيم الكميات.</p>
<p>تأكد من استبدال <code>/* قم بتعبئة القائمة هنا */</code> بالقائمة الفعلية التي تحتوي على كائنات <code>ExpressCheckout</code> التي تريد حساب مجموع قيم الكميات الخاصة بها.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="69d8f599-075f-4e64-9364-2e34be56f3fb" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بالطبع، يمكننا أكمال المقال بإضافة بعض الشروحات الإضافية والتوضيحات للقارئ حول كيفية استخدام الكود وتفاصيل أخرى مفيدة.</p>
<p>بعد تحديد المشكلة وكتابة الكود الأساسي، يمكننا تقديم بعض النصائح والاقتراحات الإضافية:</p>
<h3>استخدام الكود:</h3>
<ul>
<li><strong>التعامل مع القائمة</strong>: يجب على المستخدم توفير قائمة <code>expressCheckouts</code> التي تحتوي على كائنات <code>ExpressCheckout</code>. يمكن أن تكون هذه القائمة محددة مسبقًا في الكود أو يمكن تمريرها كمعلمة عند تشغيل البرنامج.</li>
<li><strong>تحليل النتائج</strong>: بعد تشغيل البرنامج، سيتم طباعة مجموع القيم بالوحدة التي تم تحديدها في كائنات <code>ExpressCheckout</code>، مثل العملة.</li>
</ul>
<h3>تحسين الكود:</h3>
<ul>
<li><strong>تعزيز المرونة</strong>: يمكن تحسين الكود ليكون أكثر مرونة عن طريق استخدام واجهات (<code>Interfaces</code>) وتجنب الاعتماد على نوع محدد للكائنات.</li>
<li><strong>التحقق من البيانات الدخل</strong>: يجب التحقق دائمًا من البيانات الدخل (مثل القائمة) للتأكد من أنها ليست فارغة قبل تنفيذ العمليات عليها.</li>
</ul>
<h3>ملاحظات إضافية:</h3>
<ul>
<li><strong>التوثيق الوظيفي</strong>: يمكن إضافة توثيق وظيفي إلى الكود لتوضيح كيفية استخدامه ومخرجاته المتوقعة.</li>
<li><strong>الاختبار</strong>: يجب اختبار الكود بشكل شامل لضمان أنه يؤدي بالشكل المطلوب ويمكنه التعامل مع جميع الحالات المحتملة بشكل صحيح.</li>
</ul>
<h3>ختامًا:</h3>
<p>باستخدام الكود المقدم، يمكن للمطورين بسهولة حساب مجموع قيم الكميات في قائمة من كائنات <code>ExpressCheckout</code>. ومن المهم فهم كيفية استخدام الكود وضمان أنه يتم تنفيذ الوظائف المطلوبة بشكل صحيح. باستخدام التوجيهات والتوضيحات الواردة في المقال، يمكن للمطورين تحسين كفاءة البرنامج وجعله أكثر قابلية للاستخدام وصيانة.</p>
</div>
</div>
</div>
</li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">30/03/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 3 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%a5%d8%b6%d8%a7%d9%81%d8%a9-%d8%b9%d9%86%d8%a7%d8%b5%d8%b1-%d9%82%d8%a7%d8%a6%d9%85%d8%a9-%d9%81%d9%8a-%d8%a3%d9%86%d8%af%d8%b1%d9%88%d9%8a%d8%af/">إضافة عناصر قائمة في أندرويد</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="d3ca0fe0-b99d-4ff7-b0c4-71d8daaaccea" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>في البداية، يبدو أن المشكلة تكمن في كيفية إضافة العناصر إلى الـ ArrayList. في الشيفرة المقدمة، تم إنشاء كائن من النوع <code>CommonListItems</code> واستخدامه لإضافة عناصر إلى الـ ArrayList. ومع ذلك، يتم تعديل الكائن نفسه في كل دورة من الحلقة <code>for</code> وبالتالي يتم إضافة نفس الكائن مرتين، حيث يتم تغيير القيم لكن الكائن هو نفسه.</p>
<p>لحل هذه المشكلة والحصول على النتيجة المطلوبة، يجب إنشاء كائن جديد من النوع <code>CommonListItems</code> في كل تكرار للحلقة <code>for</code>، بدلاً من تعديل نفس الكائن. يمكن فعل ذلك عن طريق وضع إنشاء الكائن <code>CommonListItems</code> داخل الحلقة <code>for</code> بدلاً من خارجها.</p>
<p>إليك كيف يمكن تعديل الشيفرة لتحقيق هذا الهدف:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>java</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-java"><span class="hljs-keyword">if</span>(BUSINESS_STR != <span class="hljs-literal">null</span>){
Log.e(<span class="hljs-string">"BUSINESS_STR"</span>, <span class="hljs-string">""</span> + BUSINESS_STR);
<span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> <span class="hljs-variable">i</span> <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <= <span class="hljs-number">1</span> ; i++) {
<span class="hljs-type">CommonListItems</span> <span class="hljs-variable">commonListItems</span> <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> <span class="hljs-title class_">CommonListItems</span>(); <span class="hljs-comment">// إنشاء كائن جديد في كل تكرار</span>
<span class="hljs-keyword">if</span>(i == <span class="hljs-number">0</span>) {
commonListItems.setName(<span class="hljs-string">"My Business"</span>);
commonListItems.setImage(String.valueOf(R.drawable.business_icon));
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span>(i == <span class="hljs-number">1</span>) {
commonListItems.setName(<span class="hljs-string">"Search Business"</span>);
commonListItems.setImage(String.valueOf(R.drawable.search_business_icon));
}
itemsaArrayList.add(commonListItems); <span class="hljs-comment">// إضافة الكائن إلى القائمة</span>
}
tvTitle.setText(<span class="hljs-string">"Business"</span>);
}
</code></div></div></pre>
<p>بهذا التعديل، سيتم إنشاء كائن <code>CommonListItems</code> جديد في كل تكرار للحلقة <code>for</code>، مما يؤدي إلى إضافة عناصر مختلفة إلى الـ ArrayList كما تمنى السائل.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="299d8d10-2145-4e17-9fa5-c143c70bac31" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بعد التعديلات اللازمة على الشيفرة لحل المشكلة المذكورة، يمكننا الآن الاستمرار في توسيع المقال لتوفير معلومات إضافية حول كيفية إضافة وتحكم في عناصر قائمة في الأندرويد.</p>
<p>في تطوير تطبيقات الأندرويد، قد تحتاج في بعض الأحيان إلى عرض قوائم من العناصر للمستخدمين. قد تكون هذه القوائم تحتوي على عناصر ثابتة أو قد تكون ديناميكية تمامًا، حسب احتياجات التطبيق. وتستخدم قائمة <code>ArrayList</code> بشكل شائع لتخزين البيانات التي تمثل عناصر القائمة.</p>
<p>في الشيفرة المعروضة، نقوم بإنشاء كائن من النوع <code>CommonListItems</code> لتمثيل عناصر القائمة. بعد ذلك، نقوم بتكرار مرتين في حلقة <code>for</code> لإضافة عناصر مختلفة إلى القائمة. وبعد إضافة العناصر، نقوم بتغيير العنوان الذي يُعرض في واجهة المستخدم باستخدام <code>tvTitle.setText("Business")</code>.</p>
<p>هذا المثال يعتبر بسيطًا لتوضيح كيفية إضافة عناصر إلى قائمة في الأندرويد. ومع ذلك، يمكن تطويره بشكل أكبر ليتناسب مع احتياجات التطبيق الخاص بك. على سبيل المثال، يمكنك استخدام مصفوفة بدلاً من حلقة <code>for</code> لتخزين العناصر وإضافتها إلى القائمة، ويمكنك أيضًا تخصيص طريقة عرض العناصر في واجهة المستخدم عن طريق استخدام <code>RecyclerView</code> أو <code>ListView</code>.</p>
<p>في النهاية، يعتمد كل شيء على متطلبات تطبيقك الخاص وتفضيلاتك الشخصية، ومن الضروري التأكد من توفير تجربة مستخدم سلسة وفعالة لمستخدمي التطبيق الخاص بك.</p>
</div>
</div>
</div>
</li>
<li class="post-item tie-standard">
<div class="post-meta clearfix"><span class="date meta-item tie-icon">30/03/2024</span><div class="tie-alignright"><span class="meta-views meta-item "><span class="tie-icon-fire" aria-hidden="true"></span> 4 </span></div></div><!-- .post-meta -->
<h2 class="post-title"><a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/python-%d8%a5%d8%b6%d8%a7%d9%81%d8%a9-%d9%86%d8%b5-%d9%84%d8%b9%d9%86%d8%a7%d8%b5%d8%b1-%d8%a7%d9%84%d9%82%d8%a7%d8%a6%d9%85%d8%a9-%d8%a8%d8%b4%d8%b1%d8%b7-%d9%85%d8%b9%d9%8a%d9%86/">Python: إضافة نص لعناصر القائمة بشرط معين</a></h2>
<div class="entry"><div data-message-author-role="assistant" data-message-id="a92908d8-1827-4280-84b4-ef80eb82927e" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>لتحقيق هذا الهدف في لغة Python، يمكنك استخدام حلقة تكرار (loop) لفحص كل عنصر في القائمة والتحقق مما إذا كان يحتوي على النص “THIS-STRING” أم لا. إذا لم يحتوي، يمكنك إضافة النص الجديد “some string” إليه. إليك كيف يمكن تنفيذ ذلك:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>python</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-python"><span class="hljs-comment"># القائمة الأصلية</span>
my_list = [<span class="hljs-string">"item.1"</span>, <span class="hljs-string">"https://sdfhkjdsffs/THIS-STRING"</span>, <span class="hljs-string">"http://fsdhfjsdhfsdf/THIS-STRING"</span>, <span class="hljs-string">"item4/THIS-STRING"</span>, <span class="hljs-string">"item5"</span>]
<span class="hljs-comment"># النص الذي نريد إضافته</span>
new_string = <span class="hljs-string">"some string"</span>
<span class="hljs-comment"># حلقة تكرار للتحقق من كل عنصر في القائمة</span>
<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(my_list)):
<span class="hljs-comment"># التحقق مما إذا كان العنصر لا يحتوي على "THIS-STRING"</span>
<span class="hljs-keyword">if</span> <span class="hljs-string">"THIS-STRING"</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> my_list[i]:
<span class="hljs-comment"># إضافة النص الجديد إلى العنصر</span>
my_list[i] += new_string
<span class="hljs-comment"># طباعة القائمة بعد التعديلات</span>
<span class="hljs-built_in">print</span>(my_list)
</code></div></div></pre>
<p>باستخدام هذا الكود، ستحصل على القائمة المحدثة حيث تمت إضافة النص “some string” إلى كل عنصر في القائمة الذي لا يحتوي على “THIS-STRING”.</p>
</div>
</div>
<h2>المزيد من المعلومات</h2>
<p><img decoding="async" src="https://it-solutions.center/pic/more_info.png" class="center"></p>
<div data-message-author-role="assistant" data-message-id="9cbe145e-4897-4b61-8706-33962a8439dc" class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&]:mt-5 overflow-x-auto">
<div class="markdown prose w-full break-words dark:prose-invert light">
<p>بناءً على طلبك، سنكمل المقال لتوضيح المزيد من الأمثلة والتفاصيل حول كيفية تنفيذ هذه العملية.</p>
<p>بالإضافة إلى استخدام حلقة التكرار (loop) كما في الكود السابق، يمكن استخدام التعبيرات الشرطية (list comprehensions) في Python للقيام بنفس العملية بطريقة أكثر إيجازًا وإتقانًا.</p>
<p>فيما يلي مثال على كيفية تحقيق نفس الهدف باستخدام التعبيرات الشرطية:</p>
<pre><div class="dark bg-gray-950 rounded-md"><div class="flex items-center relative text-token-text-secondary bg-token-main-surface-secondary px-4 py-2 text-xs font-sans justify-between rounded-t-md"><span>python</span><span class="" data-state="closed"><button class="flex gap-1 items-center"><svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="icon-sm"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 3.5C10.8954 3.5 10 4.39543 10 5.5H14C14 4.39543 13.1046 3.5 12 3.5ZM8.53513 3.5C9.22675 2.3044 10.5194 1.5 12 1.5C13.4806 1.5 14.7733 2.3044 15.4649 3.5H17.25C18.9069 3.5 20.25 4.84315 20.25 6.5V18.5C20.25 20.1569 19.1569 21.5 17.25 21.5H6.75C5.09315 21.5 3.75 20.1569 3.75 18.5V6.5C3.75 4.84315 5.09315 3.5 6.75 3.5H8.53513ZM8 5.5H6.75C6.19772 5.5 5.75 5.94772 5.75 6.5V18.5C5.75 19.0523 6.19772 19.5 6.75 19.5H17.25C18.0523 19.5 18.25 19.0523 18.25 18.5V6.5C18.25 5.94772 17.8023 5.5 17.25 5.5H16C16 6.60457 15.1046 7.5 14 7.5H10C8.89543 7.5 8 6.60457 8 5.5Z" fill="currentColor"></path></svg>Copy code</button></span></div><div class="p-4 overflow-y-auto"><code class="!whitespace-pre hljs language-python"><span class="hljs-comment"># القائمة الأصلية</span>
my_list = [<span class="hljs-string">"item.1"</span>, <span class="hljs-string">"https://sdfhkjdsffs/THIS-STRING"</span>, <span class="hljs-string">"http://fsdhfjsdhfsdf/THIS-STRING"</span>, <span class="hljs-string">"item4/THIS-STRING"</span>, <span class="hljs-string">"item5"</span>]
<span class="hljs-comment"># النص الذي نريد إضافته</span>
new_string = <span class="hljs-string">"some string"</span>
<span class="hljs-comment"># استخدام التعبيرات الشرطية لتحقيق الهدف</span>
updated_list = [item <span class="hljs-keyword">if</span> <span class="hljs-string">"THIS-STRING"</span> <span class="hljs-keyword">in</span> item <span class="hljs-keyword">else</span> item + new_string <span class="hljs-keyword">for</span> item <span class="hljs-keyword">in</span> my_list]
<span class="hljs-comment"># طباعة القائمة المحدثة</span>
<span class="hljs-built_in">print</span>(updated_list)
</code></div></div></pre>
<p>باستخدام هذا الكود، ستحصل على نتيجة مماثلة للكود السابق، حيث تم إضافة النص “some string” إلى كل عنصر في القائمة الذي لا يحتوي على “THIS-STRING”.</p>
<p>كما يمكن استخدام الدوال والمكتبات المساعدة في Python مثل <code>filter()</code> و <code>map()</code> لتحقيق نفس الهدف، لكن التعبيرات الشرطية وحلقات التكرار تعتبر الطرق الأكثر شيوعًا وبساطة لتنفيذ هذا النوع من العمليات في Python.</p>
<p>بهذا، يمكن لمطوري Python الآن تنفيذ العملية المطلوبة بسهولة وفعالية باستخدام أحد الأساليب المذكورة أعلاه.</p>
</div>
</div>
</div>
</li>
</ul><!-- #posts-container /-->
<div class="clearfix"></div>
</div><!-- .mag-box-container /-->
</div><!-- .container-wrapper /-->
</div><!-- .mag-box /-->
<div class="pages-nav"> <div class="pages-numbers pages-standard">
<span class="first-page first-last-pages">
<a href="https://it-solutions.center/tag/%d9%82%d8%a7%d8%a6%d9%85%d8%a9/" ><span class="pagination-icon" aria-hidden="true"></span>الصفحة السابقة</a> </span>
<span class="last-page first-last-pages">
<a href="https://it-solutions.center/tag/%d9%82%d8%a7%d8%a6%d9%85%d8%a9/page/3/" ><span class="pagination-icon" aria-hidden="true"></span>الصفحة التالية</a> </span>
</div>
</div>
</div><!-- .main-content /-->
<aside class="sidebar tie-col-md-4 tie-col-xs-12 normal-side is-sticky" aria-label="القائمة الجانبية الرئيسية">
<div class="theiaStickySidebar">
<div id="search-3" class="container-wrapper widget widget_search"><form role="search" method="get" class="search-form" action="https://it-solutions.center/">
<label>
<span class="screen-reader-text">البحث عن:</span>
<input type="search" class="search-field" placeholder="بحث …" value="" name="s" />
</label>
<input type="submit" class="search-submit" value="بحث" />
</form><div class="clearfix"></div></div><!-- .widget /-->
<div id="recent-posts-3" class="container-wrapper widget widget_recent_entries">
<div class="widget-title the-global-title"><div class="the-subtitle">أحدث المقالات<span class="widget-title-icon tie-icon"></span></div></div>
<ul>
<li>
<a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d9%81%d9%87%d9%85-%d8%a7%d9%84%d8%aa%d8%b4%d8%a7%d8%a8%d9%87%d8%a7%d8%aa-%d9%88%d8%a7%d9%84%d9%81%d8%b1%d9%88%d9%82-%d8%a7%d9%84%d8%aa%d9%83%d9%88%d9%8a%d9%86-%d9%88%d8%a7%d9%84%d8%b5%d9%81%d9%88/">فهم التشابهات والفروق: التكوين والصفوف الداخلية</a>
<span class="post-date">15/04/2024</span>
</li>
<li>
<a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%b6%d8%a8%d8%b7-%d8%a7%d9%84%d9%83%d9%88%d9%83%d9%8a%d8%b2-%d9%88%d8%a7%d9%84%d9%88%d8%b5%d9%88%d9%84-%d9%84%d8%a8%d9%8a%d8%a7%d9%86%d8%a7%d8%aa-%d8%a7%d9%84%d9%85/">كيفية ضبط الكوكيز والوصول لبيانات المواقع باستخدام PHP</a>
<span class="post-date">15/04/2024</span>
</li>
<li>
<a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%a7%d8%b3%d8%aa%d9%83%d8%b4%d8%a7%d9%81-%d8%a7%d9%84%d8%a8%d8%af%d9%8a%d9%84-%d9%84%d9%80-findasync-%d9%81%d9%8a-linq-%d8%a7%d9%84%d8%ad%d9%84%d9%88%d9%84-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af/">استكشاف البديل لـ FindAsync في LINQ: الحلول باستخدام SingleOrDefaultAsync</a>
<span class="post-date">15/04/2024</span>
</li>
<li>
<a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d8%aa%d8%ad%d8%b3%d9%8a%d9%86-%d8%a3%d8%af%d8%a7%d8%a1-%d8%a7%d9%84%d8%aa%d8%b7%d8%a8%d9%8a%d9%82%d8%a7%d8%aa-%d8%b9%d9%84%d9%89-ios/">تحسين أداء التطبيقات على iOS</a>
<span class="post-date">15/04/2024</span>
</li>
<li>
<a href="https://it-solutions.center/%d8%a7%d9%84%d8%a8%d8%b1%d9%85%d8%ac%d8%a9/%d9%83%d9%8a%d9%81%d9%8a%d8%a9-%d8%a5%d8%b6%d8%a7%d9%81%d8%a9-%d9%85%d8%ad%d8%aa%d9%88%d9%89-%d8%a8%d8%a7%d8%b3%d8%aa%d8%ae%d8%af%d8%a7%d9%85-curl/">كيفية إضافة محتوى باستخدام CURL</a>
<span class="post-date">15/04/2024</span>
</li>
</ul>
<div class="clearfix"></div></div><!-- .widget /--> </div><!-- .theiaStickySidebar /-->
</aside><!-- .sidebar /-->
</div><!-- .main-content-row /--></div><!-- #content /-->
<div class="adsbygoogle Ad-Container sidebar-ad ad-slot" data-ad-manager-id="1" data-ad-module="1" data-ad-width="100" data-adblockkey="200" data-advadstrackid="1">
<div style="z-index:-1; height:0; width:1px; visibility: hidden; bottom: -1px; left: 0;"></div>
</div>
<div class="stream-item stream-item-above-footer"><div class="stream-item-size" style="">
<div class="stream-item stream-item-in-post stream-item-in-post-1"><div>
<!-- defults -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-3293364314201893"
data-ad-slot="2303082872"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div></div>
<footer id="footer" class="site-footer dark-skin dark-widgetized-area">
<div id="site-info" class="site-info">
<div class="container">
<div class="tie-row">
<div class="tie-col-md-12">
<div class="copyright-text copyright-text-first"><footer class="footer-container">
© Copyright <?php echo date('Y'); ?>, All Rights Reserved
<span><a href="/privacy">| Privacy</a></span>
<span><a href="/terms">| Terms</a></span>
<span style="color:red;" class="tie-icon-heart"></span>
</footer>
</div><div class="copyright-text copyright-text-second"> <span><strong>Our Other Projects:</strong></span>
<span><a href="https://freesourcelibrary.com/" target="_blank">| Free Source Library</a></span>
<span><a href="https://revistacompleta.com/" target="_blank">| La Revista Completa</a></span>
<span><a href="https://meukultura.com//" target="_blank">| Meu Kultura</a></span>
<span><a href="https://lasujets.com/" target="_blank">| La Sujets</a></span>
<span><a href="https://lovewithrecipes.com/" target="_blank">| Love With Recipes</a></span>
<span><a href="https://mwade3.com/" target="_blank">| مواضيع</a></span>
<span><a href="https://it-solutions.center/" target="_blank">| مركز حلول تكنولوجيا المعلومات</a></span>
<span><a href="https://qr-solutions.com/" target="_blank">| QR Solutions</a></span></div>
</div><!-- .tie-col /-->
</div><!-- .tie-row /-->
</div><!-- .container /-->
</div><!-- #site-info /-->
</footer><!-- #footer /-->
<a id="go-to-top" class="go-to-top-button" href="#go-to-tie-body">
<span class="tie-icon-angle-up"></span>
<span class="screen-reader-text">زر الذهاب إلى الأعلى</span>
</a>
</div><!-- #tie-wrapper /-->
<aside class=" side-aside normal-side dark-skin dark-widgetized-area appear-from-left" aria-label="القائمة الجانبية الثانوية" style="visibility: hidden;">
<div data-height="100%" class="side-aside-wrapper has-custom-scroll">
<a href="#" class="close-side-aside remove big-btn">
<span class="screen-reader-text">إغلاق</span>
</a><!-- .close-side-aside /-->
<div id="mobile-container">
<div id="mobile-search">
<form role="search" method="get" class="search-form" action="https://it-solutions.center/">
<label>
<span class="screen-reader-text">البحث عن:</span>
<input type="search" class="search-field" placeholder="بحث …" value="" name="s" />
</label>
<input type="submit" class="search-submit" value="بحث" />
</form> </div><!-- #mobile-search /-->
<div id="mobile-menu" class="">
</div><!-- #mobile-menu /-->
<div id="mobile-social-icons" class="social-icons-widget solid-social-icons">
<ul><li class="social-icons-item"><a class="social-link facebook-social-icon" rel="external noopener nofollow" target="_blank" href="https://www.facebook.com/it.solu.center"><span class="tie-social-icon tie-icon-facebook"></span><span class="screen-reader-text">فيسبوك</span></a></li></ul>
</div><!-- #mobile-social-icons /-->
</div><!-- #mobile-container /-->
</div><!-- .side-aside-wrapper /-->
</aside><!-- .side-aside /-->
</div><!-- #tie-container /-->
</div><!-- .background-overlay /-->
<!--googleoff: all--><div id="cookie-law-info-bar" data-nosnippet="true"><span><div class="cli-bar-container cli-style-v2"><div class="cli-bar-message">We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies.</br><div class="wt-cli-ccpa-element"> <a style="color:#333333" class="wt-cli-ccpa-opt-out">Do not sell my personal information</a>.</div></div><div class="cli-bar-btn_container"><a role='button' class="medium cli-plugin-button cli-plugin-main-button cli_settings_button" style="margin:0px 10px 0px 5px">Settings</a><a role='button' data-cli_action="accept" id="cookie_action_close_header" class="medium cli-plugin-button cli-plugin-main-button cookie_action_close_header cli_action_button wt-cli-accept-btn">Accept</a></div></div></span></div><div id="cookie-law-info-again" data-nosnippet="true"><span id="cookie_hdr_showagain">Privacy & Cookies Policy</span></div><div class="cli-modal" data-nosnippet="true" id="cliSettingsPopup" tabindex="-1" role="dialog" aria-labelledby="cliSettingsPopup" aria-hidden="true">
<div class="cli-modal-dialog" role="document">
<div class="cli-modal-content cli-bar-popup">
<button type="button" class="cli-modal-close" id="cliModalClose">
<svg class="" viewBox="0 0 24 24"><path d="M19 6.41l-1.41-1.41-5.59 5.59-5.59-5.59-1.41 1.41 5.59 5.59-5.59 5.59 1.41 1.41 5.59-5.59 5.59 5.59 1.41-1.41-5.59-5.59z"></path><path d="M0 0h24v24h-24z" fill="none"></path></svg>
<span class="wt-cli-sr-only">Close</span>
</button>
<div class="cli-modal-body">
<div class="cli-container-fluid cli-tab-container">
<div class="cli-row">
<div class="cli-col-12 cli-align-items-stretch cli-px-0">
<div class="cli-privacy-overview">
<h4>Privacy Overview</h4> <div class="cli-privacy-content">
<div class="cli-privacy-content-text">This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.</div>
</div>
<a class="cli-privacy-readmore" aria-label="Show more" role="button" data-readmore-text="Show more" data-readless-text="Show less"></a> </div>
</div>
<div class="cli-col-12 cli-align-items-stretch cli-px-0 cli-tab-section-container">
<div class="cli-tab-section">
<div class="cli-tab-header">
<a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="necessary" data-toggle="cli-toggle-tab">
Necessary </a>
<div class="wt-cli-necessary-checkbox">
<input type="checkbox" class="cli-user-preference-checkbox" id="wt-cli-checkbox-necessary" data-id="checkbox-necessary" checked="checked" />
<label class="form-check-label" for="wt-cli-checkbox-necessary">Necessary</label>
</div>
<span class="cli-necessary-caption">Always Enabled</span>
</div>
<div class="cli-tab-content">
<div class="cli-tab-pane cli-fade" data-id="necessary">
<div class="wt-cli-cookie-description">
Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information. </div>
</div>
</div>
</div>
<div class="cli-tab-section">
<div class="cli-tab-header">
<a role="button" tabindex="0" class="cli-nav-link cli-settings-mobile" data-target="non-necessary" data-toggle="cli-toggle-tab">
Non-necessary </a>
<div class="cli-switch">
<input type="checkbox" id="wt-cli-checkbox-non-necessary" class="cli-user-preference-checkbox" data-id="checkbox-non-necessary" checked='checked' />
<label for="wt-cli-checkbox-non-necessary" class="cli-slider" data-cli-enable="Enabled" data-cli-disable="Disabled"><span class="wt-cli-sr-only">Non-necessary</span></label>
</div>
</div>
<div class="cli-tab-content">
<div class="cli-tab-pane cli-fade" data-id="non-necessary">
<div class="wt-cli-cookie-description">
Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website. </div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cli-modal-footer">
<div class="wt-cli-element cli-container-fluid cli-tab-container">
<div class="cli-row">
<div class="cli-col-12 cli-align-items-stretch cli-px-0">
<div class="cli-tab-footer wt-cli-privacy-overview-actions">
<a id="wt-cli-privacy-save-btn" role="button" tabindex="0" data-cli-action="accept" class="wt-cli-privacy-btn cli_setting_save_button wt-cli-privacy-accept-btn cli-btn">SAVE & ACCEPT</a>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="cli-modal-backdrop cli-fade cli-settings-overlay"></div>
<div class="cli-modal-backdrop cli-fade cli-popupbar-overlay"></div>
<!--googleon: all--><div id="autocomplete-suggestions" class="autocomplete-suggestions"></div><div id="is-scroller-outer"><div id="is-scroller"></div></div><div id="fb-root"></div> <div id="tie-popup-search-desktop" class="tie-popup tie-popup-search-wrap" style="display: none;">
<a href="#" class="tie-btn-close remove big-btn light-btn">
<span class="screen-reader-text">إغلاق</span>
</a>
<div class="popup-search-wrap-inner">
<div class="live-search-parent pop-up-live-search" data-skin="live-search-popup" aria-label="بحث">
<form method="get" class="tie-popup-search-form" action="https://it-solutions.center/">
<input class="tie-popup-search-input is-ajax-search" inputmode="search" type="text" name="s" title="بحث عن" autocomplete="off" placeholder="إكتب كلمة البحث ثم إضغط زر الإدخال" />
<button class="tie-popup-search-submit" type="submit">
<span class="tie-icon-search tie-search-icon" aria-hidden="true"></span>
<span class="screen-reader-text">بحث عن</span>
</button>
</form>
</div><!-- .pop-up-live-search /-->
</div><!-- .popup-search-wrap-inner /-->
</div><!-- .tie-popup-search-wrap /-->
<div id="tie-popup-search-mobile" class="tie-popup tie-popup-search-wrap" style="display: none;">
<a href="#" class="tie-btn-close remove big-btn light-btn">
<span class="screen-reader-text">إغلاق</span>
</a>
<div class="popup-search-wrap-inner">
<div class="live-search-parent pop-up-live-search" data-skin="live-search-popup" aria-label="بحث">
<form method="get" class="tie-popup-search-form" action="https://it-solutions.center/">
<input class="tie-popup-search-input is-ajax-search" inputmode="search" type="text" name="s" title="بحث عن" autocomplete="off" placeholder="بحث عن" />
<button class="tie-popup-search-submit" type="submit">
<span class="tie-icon-search tie-search-icon" aria-hidden="true"></span>
<span class="screen-reader-text">بحث عن</span>
</button>
</form>
</div><!-- .pop-up-live-search /-->
</div><!-- .popup-search-wrap-inner /-->
</div><!-- .tie-popup-search-wrap /-->
<div id="side-stream-container" class="container"></div>
<div class="side-stream" id="side-stream-right" style="display:none; z-index:108; position:absolute; text-align:center; top:0px; width:200px; overflow:hidden;">
<div class="stream-item stream-item-in-post stream-item-in-post-1"><div>
<!-- defults -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-3293364314201893"
data-ad-slot="2303082872"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div>
<div class="side-stream" id="side-stream-left" style="display:none; z-index:108; position:absolute; text-align:center; top:0px; width:200px; overflow:hidden;">
<div class="stream-item stream-item-in-post stream-item-in-post-1"><div>
<!-- defults -->
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-3293364314201893"
data-ad-slot="2303082872"
data-ad-format="auto"
data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>
</div>
</div>
</div>
<script type="text/javascript" id="tie-side-e3lan-js-extra">
/* <![CDATA[ */
var tie_side_e3lan = {"is_boxed":"","screen_width":"","side_margin":"15","margin_top":"","margin_top_scroll":"","left_ad_code":"[ads1]","left_ad_width":"200","left_ad_height":"","right_ad_code":"[ads1]","right_ad_width":"200","right_ad_height":""};
/* ]]> */
</script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/side-e3lan.js?ver=6.5.2" id="tie-side-e3lan-js"></script>
<script type="text/javascript" id="tie-scripts-js-extra">
/* <![CDATA[ */
var tie = {"is_rtl":"1","ajaxurl":"https:\/\/it-solutions.center\/wp-admin\/admin-ajax.php","is_side_aside_light":"","is_taqyeem_active":"","is_sticky_video":"","mobile_menu_top":"","mobile_menu_active":"area_1","mobile_menu_parent":"","lightbox_all":"true","lightbox_gallery":"true","lightbox_skin":"dark","lightbox_thumb":"horizontal","lightbox_arrows":"true","is_singular":"","autoload_posts":"","reading_indicator":"true","lazyload":"","select_share":"true","select_share_twitter":"","select_share_facebook":"","select_share_linkedin":"","select_share_email":"","facebook_app_id":"5303202981","twitter_username":"","responsive_tables":"true","ad_blocker_detector":"true","sticky_behavior":"upwards","sticky_desktop":"true","sticky_mobile":"true","sticky_mobile_behavior":"default","ajax_loader":"<div class=\"loader-overlay\"><div class=\"spinner-circle\"><\/div><\/div>","type_to_search":"1","lang_no_results":"\u0644\u0645 \u064a\u062a\u0645 \u0627\u0644\u0639\u062b\u0648\u0631 \u0639\u0644\u0649 \u0646\u062a\u0627\u0626\u062c","sticky_share_mobile":"true","sticky_share_post":"","sticky_share_post_menu":"","ad_blocker_detector_delay":"3000"};
/* ]]> */
</script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/scripts.min.js?ver=7.0.2" id="tie-scripts-js"></script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/ilightbox/lightbox.js?ver=7.0.2" id="tie-js-ilightbox-js"></script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/sliders.min.js?ver=7.0.2" id="tie-js-sliders-js"></script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/shortcodes.js?ver=7.0.2" id="tie-js-shortcodes-js"></script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/desktop.min.js?ver=7.0.2" id="tie-js-desktop-js"></script>
<script type="text/javascript" src="https://it-solutions.center/wp-content/themes/jannah/assets/js/live-search.js?ver=7.0.2" id="tie-js-livesearch-js"></script>
<script>
WebFontConfig ={
google:{
families: [ 'Poppins:600,regular:latin&display=swap' ]
}
};
(function(){
var wf = document.createElement('script');
wf.src = '//ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
wf.type = 'text/javascript';
wf.defer = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})();
</script> <div id="tie-popup-adblock" class="tie-popup is-fixed-popup">
<div class="tie-popup-container">
<div class="container-wrapper">
<a href="#" class="tie-btn-close remove big-btn light-btn" >
<span class="screen-reader-text">إغلاق</span>
</a>
<span class="tie-adblock-icon tie-icon-ban" aria-hidden="true"></span>
<h2>أنت تستخدم إضافة Adblock</h2>
<div class="adblock-message">
يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر </div>
</div><!-- .container-wrapper /-->
</div><!-- .tie-popup-container /-->
</div><!-- .tie-popup /-->
</body>
</html>