کار کردن با لیست ها در زبان های برنامه نویسی تابع گرا

در این قسمت در رابطه با لیست ها صحبت‌ خواهیم کرد. مفهوم لیست یک مفهوم چند منظوره در زبان های برنامه نویسی تابع گرا است و به طور کلی برای ذخیره کردن مجموعه ‌ای از عناصر هم جنس مورد استفاده قرار می‌گیرد. از این نقطه نظر مفهوم لیست ها بسیار شبیه به مفهوم آرایه ها می باشد.لیست ها می توانند عناصر مختلفی را در کنار یکدیگر قرار بدهند و به طور کلی با استفاده از یک اندیس امکان آدرس دهی به آن عناصر را در اختیار ما قرار می‌دهند. البته پیاده سازی لیست ها از زبانی به زبان دیگر متفاوت است.ایجاد کردن یک لیست از اعداد در زبان جاوادر زبان برنامه نویسی جاوا و C++ مفهوم Link ها در قالب یک data type و یا نوع داده ای پیاده سازی نشده است؛ اما می‌توانیم با روش‌های جایگزین لیست‌ ها را در زبان برنامه نویسی جاوا با استفاده از ArrayList و LinkedList پیاده سازی کنیم. مثالی که در قسمت زیر مشاهده می کنید نحوه ایجاد کردن یک لیست در زبان جاوا را نشان می دهد.[c++]import java.util.*;import java.lang.*;import java.io.*;/* Name of the class has to be “Main” only if the class is public. */public class HelloWorld {public static void main (String[] args) throws java.lang.Exception {List listStrings = new LinkedList();listStrings.add(“1”);listStrings.add(“2”);listStrings.add(“3”);listStrings.add(“4”);listStrings.add(“5”);System.out.println(listStrings);}}[/c++]در این قسمت ما از لیست پیوندی و یا همان LinkedList به منظور ایجاد کردن یک لیست از اعداد استفاده کرده ایم. خروجی این کد شبیه به قسمت زیر خواهد بود.[1, 2, 3, 4, 5]ایجاد کردن یک لیست از اعداد در زبان برنامه نویسی Erlangکدی که در قسمت زیر مشاهده می کنید نحوه پیاده سازی یک لیست در زبان برنامه نویسی Erlang را نشان می‌دهد.[c++]-module(helloworld).-export([start/0]).start() ->Lst = [1,2,3,4,5],io:fwrite(“~w~n”,[Lst]).[/c++]خروجی این کد شبیه به قسمت زیر خواهد بود.[1 2 3 4 5]کار کردن با لیست ها در زبان جاوادر این قسمت در رابطه با عملیاتی که می‌توان بر روی لیست ‌ها انجام داد صحبت خواهیم کرد. اغلب زبان های برنامه نویسی عملیات مختلفی را برای کار کردن با لیست ها در اختیار ما قرار می‌دهند و اما در این قسمت در رابطه با زبان برنامه نویسی جاوا صحبت خواهیم کرد.اضافه کردن یک عنصر به درون لیستبرای اضافه کردن عنصر به درون لیست می‌توانیم از متد add(Object) و add(index, Object) و متد ()addAll استفاده کنیم تا بتوانیم عناصری را به درون لیست اضافه کنیم. کدی که در قسمت زیر مشاهده می‌کنید این موضوع را نشان می‌دهد.[c++]ListStrings.add(3, “three”)[/c++]حذف کردن عناصر از درون یک لیستمتدهای remove(index) و ()removeobject نیز برای حذف کردن عناصر از درون لیست مورد استفاده قرار می‌گیرند. کدی که در قسمت زیر مشاهده می کنید این موضوع را نشان می‌دهد.[c++]ListStrings.remove(3,”three”)[/c++]ضمناً توجه کنید که برای پاک کردن تمامی لیست از متد clear استفاده می‌کنیم.بازیابی عناصر از درون یک لیستاز متد get برای بازیابی عناصر از درون لیست در یک مکان مشخص استفاده می‌کنیم. علاوه بر این، متدهای getfirst و getlast به ترتیب می‌توانند اولین عنصر و آخرین عنصر موجود در لیست را در اختیار ما قرار بدهند. کد زیر مثالی از این موضوع را نشان می دهد.[c++]String str = ListStrings.get(2)[/c++]به روز رسانی کردن عناصر در یک لیستبا استفاده از متد set(index,element) می توانیم یک عنصر در یک اندیس مشخص را به روز رسانی کنیم. کد زیر این موضوع را نشان می‌دهد.[c++]listStrings.set(2,”to”)[/c++]مرتب سازی عناصر درون یک لیستبرای مرتب کردن عناصر درون یک لیست از متدهای sort و reverse استفاده می‌کنیم. این دو متد به ترتیب لیست را به صورت صعودی و نزولی مرتب خواهند کرد. کد زیر مثالی از این موضوع را نشان می‌دهد.[c++]Collection.sort(listStrings)[/c++]جستجو کردن عناصر در یک لیستبه منظور جستجو کردن یک عنصر در یک لیست می توانیم از متدهای contains و indexOf و lastIndexOf استفاده کنیم. متد contains به عنوان پارامتر ورودی یک object را دریافت می‌کند و اگر بتواند آن عنصر را در لیست مورد نظر پیدا کند مقدار true را بر می گرداند؛ در غیر اینصورت مقدار false برگردانده خواهد شد.متد indexOf به عنوان ورودی یک object را دریافت کرده و یک int را برمی‌گرداند. در واقع خروجی این متد اندیس اولین رخداد عنصر مورد نظر در لیست است. اگر آن عنصر در لیست پیدا نشود از مقدار -1 برای نشان دادن این موضوع استفاده می‌شود.متد lastIndexOf به عنوان ورودی یک object را دریافت کرده و یک int را برمی گرداند. خروجی این متد آخرین رخداد یک عنصر مشخص در لیست است و اگر عنصر مشخص شده در لیست موجود نباشد مقدار -1 برگردانده خواهد شد.عملیات مختلف کار کردن با لیست ها در زبان برنامه نویسی Erlangدر این قسمت در رابطه با برخی از عملیات امکان پذیر در زبان برنامه نویسی Erlang صحبت‌ خواهیم‌کرد.اضافه کردن دو لیست به یکدیگربا استفاده از متد append(listfirst, listsecond) می توانیم یک لیست جدید را به لیست دیگری اضافه کنیم. این موضوع در کد زیر نشان داده شده است.[c++]append(list1,list2)[/c++]حذف کردن یک عنصراز متد delete(element, listname) برای حذف کردن یک عنصر استفاده می‌کنیم. این متد به عنوان خروجی لیست جدید که عنصر مورد نظر از آن حذف شده است را برمی‌گرداند. مثالی از استفاده کردن از این متد را در قسمت زیر مشاهده می کنید.[c++]delete(5,list1)[/c++]حذف کردن آخرین عنصر از درون یک لیستبه منظور حذف کردن آخرین عنصر از درون یک لیست می توانیم از متد droplast(listname) استفاده کنیم. خروجی این متد یک لیست است که عنصر مورد نظر از آن حذف شده است. کد زیر این موضوع را نشان می‌دهد.[c++]droplast(list1)[/c++]جستجو کردن یک عنصربا استفاده از متد member(element, listname) می توانیم یک عنصر را در لیست مورد نظر جستجو کنیم. اگر عنصر مورد نظر پیدا شود، خروجی این متد true و در غیر این صورت false خواهد بود. کد زیر این موضوع را نشان می دهد.[c++]member(5,list1)[/c++]به دست آوردن حداکثر مقدار و حداقل مقدارمتدهای max(listname) و min(listname) می توانند برای پیدا کردن حداکثر و حداقل مقدارها در یک لیست مورد استفاده قرار بگیرند. این موضوع در کد زیر نشان داده شده است.[c++]max(list1)[/c++]مرتب کردن عناصر درون یک لیستاز متد sort(listname) و reverse(listname) می‌توانیم برای مرتب سازی یک لیست به ترتیب به صورت صعودی و نزولی استفاده کنیم. این موضوع در کد زیر نشان داده شده است.[c++]sort(list1)[/c++]جمع زدن عناصربا استفاده از متد sum(listname) می توانیم تمامی عناصر موجود در یک لیست را جمع بزنیم و به عنوان یک خروجی برگردانیم.[c++]sum(list1)[/c++]مرتب سازی یک لیست به صورت صعودی و نزولی با استفاده از زبان برنامه نویسی جاواکدی که در قسمت زیر مشاهده می کنید مرتب کردن یک لیست به صورت صعودی و هم چنین نزولی را در زبان برنامه نویسی جاوا به ما نشان می‌دهد.[c++]import java.util.*;import java.lang.*;import java.io.*;public class SortList {public static void main (String[] args) throws java.lang.Exception {List list1 = new ArrayList();list1.add(“5”);list1.add(“3”);list1.add(“1”);list1.add(“4”);list1.add(“2”);System.out.println(“list before sorting: ” + list1);Collections.sort(list1);System.out.println(“list in ascending order: ” + list1);Collections.reverse(list1);System.out.println(“list in dsending order: ” + list1);}}[/c++]خروجی این کد شبیه به قسمت زیر خواهد بود.list before sorting : [5, 3, 1, 4, 2]list in ascending order : [1, 2, 3, 4, 5]list in dsending order : [5, 4, 3, 2, 1]مرتب سازی یک لیست به صورت صعودی با استفاده از زبان برنامه نویسی Erlangکدی که در قسمت زیر مشاهده می کنید مرتب سازی یک لیست را به صورت صعودی و همچنین نزولی با استفاده از زبان برنامه نویسی Erlang که یک زبان تابع گرا می باشد نشان می‌دهد.[c++]-module(helloworld).-import(lists,[sort/1]).-export([start/0]).start() ->List1 = [5,3,4,2,1],io:fwrite(“~p~n”,[sort(List1)]),[/c++]خروجی این کد شبیه به قسمت زیر خواهد بود.[1,2,3,4,5]همانطور که تا به اینجای کار مشاهده کردید مفهوم لیست در زبان های برنامه نویسی مختلف به شکل ‌های مختلف پیاده سازی شده اند و عملیاتی که بر روی آنها امکان پذیر می باشد نیز از یک زبان تا زبان دیگر می تواند متفاوت باشد.منبع: وبسایت پرووید