অ্যারেলিস্টের শেষ মানটি কীভাবে পাবেন


595

আমি কীভাবে অ্যারেলিস্টের শেষ মান পেতে পারি?

আমি অ্যারেলিস্টের শেষ সূচকটি জানি না।


164
আমি এই প্রশ্নটিকে উজ্জীবিত করেছি, কারণ আমি ভাবছিলাম যে কেন এমন কোনও পদ্ধতি নেই: getLastItem () এবং এর উত্তর আছে কিনা তা দেখতে এসেছি। list.size () - 1 টি সুন্দর নয়।
নুনো গোনালভেস

2
@ নুনোগোনালভস আপনি সর্বদা এটি সাবক্লাস করতে পারেন!
টিম

12
আপনি সর্বদা একটি লিঙ্কডলিস্ট ব্যবহার করতে পারেন যার পদ্ধতি রয়েছেgetLast()
সিডেসানো

6
লিঙ্কযুক্ত তালিকাভুক্তকরণ এটি ওভারহেডের পুরো গাদা যুক্ত করে। নীচে প্রদর্শিত হিসাবে পেয়ারা ব্যবহার করুন: lastElement = Iterables.getLast (পুনরাবৃত্তিযোগ্য তালিকা); অথবা কেবল আকার () এর সাথে একটি গেট () কলকে সূচক করুন - ১. এটি যখন প্রয়োজন হয় না তখন লিঙ্কযুক্ত তালিকার ব্যবহারের তুলনায় এটি কুশ্রী নয়। ব্যতিক্রমী শর্তাদি সম্পর্কে সাধারণ সতর্কতা প্রয়োগ হয় - অ্যারেলিস্ট জাভাদোক দেখুন।
রিচিএইচএইচ

10
তালিকা.সাইজ () -1 ব্যবহার করা সুন্দর নয়, তবে এর জন্য কেবল একটি তৃতীয় পক্ষের এপিআই ব্যবহার করা আরও খারাপ
জাভো

উত্তর:


691

নিম্নলিখিতটি Listইন্টারফেসের অংশ (যা অ্যারেলিস্ট প্রয়োগ করে):

E e = list.get(list.size() - 1);

Eউপাদান ধরনের। তালিকাটি খালি থাকলে getএকটি নিক্ষেপ করে IndexOutOfBoundsException। আপনি এখানে পুরো এপিআই ডকুমেন্টেশন সন্ধান করতে পারেন ।


5
এর ফলে কি তালিকার পুনরাবৃত্তি ঘটবে? এটা আমার কাছে খুব দক্ষ বলে মনে হচ্ছে না। আমি সি ++ থেকে এসেছি, যেখানে তালিকার অবজেক্টে আসল সামনের () এবং পিছনে () পদ্ধতি রয়েছে, যা অভ্যন্তরীণভাবে মাথা এবং লেজের রেফারেন্স সহ প্রয়োগ করা হয়। জাভাতেও কি তেমন কোনও ব্যবস্থা আছে?
ব্র্যাডি

26
কাজ হবে না। তালিকাটি খালি থাকলে কী হবে, list.size () 0 ফিরে আসবে এবং আপনি list.get (-1) দিয়ে শেষ করবেন;
এফআরআর

17
নিবন্ধন করুন তিনি তালিকার সর্বশেষ মান পেতে চান। অবশ্যই এতে বোঝা যায় যে আকারটি () হল> ০. যে কোনও ধরণের প্রয়োগের ক্ষেত্রে এটি সত্য। শেষ পর্যন্ত পড়া আপনার মন্তব্য লেখার জন্য প্রয়োজনীয় সময় এবং উত্তর দেওয়ার জন্য আমার সময় সাশ্রয় করত :) আমার উত্তর শেষে বলেছে "তালিকাটি যদি খালি থাকে তবে একটি সূচি ছুঁড়ে দিন"
জোহানেস শ্যাব - লিটব

15
@ ব্র্যাডি এটি অ্যারেলিস্টের জন্য কোনও ও (এন) পুনরাবৃত্তি ঘটায় না কারণ আপনি অনুমান করতে পারেন, এটি অ্যারের দ্বারা ব্যাকড হয়েছে। সুতরাং একটি সাধারণ প্রাপ্তি (<index>) কেবলমাত্র অ্যারে থেকে ধ্রুবক-সময় পুনরুদ্ধার করে। (জেডিকে সূত্র এটি নিশ্চিত করে) অন্যান্য তালিকা বাস্তবায়নের জন্য এটির গ্যারান্টি নেই, সুতরাং উদাহরণস্বরূপ, লিঙ্কডলিস্টে একটি getLast () পদ্ধতি রয়েছে যা ধ্রুবক সময়।
পিটার

9
আমি বুঝতে পারি না কেন তারা একটি সহজ বাস্তবায়ন করার সিদ্ধান্ত নিয়েছে lastElement()তাদের জন্য পদ্ধতি Vectorকিন্তু জন্য ArrayList। এই অসঙ্গতি নিয়ে কী ঘটবে?
স্টিফান দিমিত্রভ

211

ভ্যানিলা জাভাতে একটি মার্জিত উপায় নেই।

গুগল পেয়ারা

গুগল পেয়ারা গ্রন্থাগার মহান - তাদের খুঁজে বার করো Iterablesবর্গ । সাধারণ পদ্ধতির মতো NoSuchElementException, তালিকাটি শূন্য থাকলে, এই পদ্ধতিটি একটি নিক্ষেপ করবে - আমি অনেক ভাল, বা একটি ডিফল্ট নির্দিষ্ট করার ক্ষমতা খুঁজে পেয়েছি :IndexOutOfBoundsExceptionsize()-1NoSuchElementException

lastElement = Iterables.getLast(iterableList);

ব্যতিক্রমের পরিবর্তে তালিকাটি খালি থাকলে আপনি একটি ডিফল্ট মানও সরবরাহ করতে পারেন:

lastElement = Iterables.getLast(iterableList, null);

বা, যদি আপনি বিকল্পগুলি ব্যবহার করেন:

lastElementRaw = Iterables.getLast(iterableList, null);
lastElement = (lastElementRaw == null) ? Option.none() : Option.some(lastElementRaw);

3
আপনি কি জানেন যে এই পদ্ধতিটি শেষ উপাদানটি অনুসন্ধানের জন্য তালিকায় একটি লিনিয়ার হাঁটাচলা করে?
বিলমান

5
@ বিলম্যান হ্যাশসেটের ক্ষেত্রে হ্যাঁ, অ্যারেলিস্টের ক্ষেত্রে নং।
সাইমন

6
আপনার সেই Iterables.getLastচেকটি যুক্ত করা উচিত RandomAccessযা প্রয়োগ করা হয়েছে কিনা এবং তাই এটি ও (1) এর আইটেমটিতে অ্যাক্সেস করে কিনা ।
কার্ল রিখটার

1
পরিবর্তে Option, আপনি নেটিভ জাভা ব্যবহার করতে পারেন Optional। এটি একটি বিট ক্লিনার হবে: lastElement = Optional.ofNullable(lastElementRaw);
লিটল হেল্পার

186

এটি করা উচিত:

if (arrayList != null && !arrayList.isEmpty()) {
  T item = arrayList.get(arrayList.size()-1);
}

29
এটা করার কোন সুদৃ ?় উপায় নেই? : /
কমরেড হোমার

6
আপনার সম্ভবত কমপক্ষে এটি বরাদ্দ করাতে হবে ... অ্যারেলিস্ট.জেটটি পার্শ্ব-প্রভাব মুক্ত।
অ্যান্টনি স্টাবস

উপরোক্ত কিছু প্রদান / ফেরত দেয় না তা বোঝানো কি খুব ক্ষুদ্র?
ব্রায়ান

যদি একটি অ্যারেলিস্টের কেবল একটি রেকর্ড থাকে তবে ব্যতিক্রম ঘটে is এর সমাধান কী হবে?
হাসনাইন_হমাদ

2
@ হাসনাইন_হমাদ, যখন অ্যারালিস্টের 1 উপাদান রয়েছে এটি সঠিকভাবে কাজ করে, আপনার শূন্য রেকর্ড সহ অ-আরম্ভীকৃত অ্যারেলিস্ট এবং অ্যারেলিস্ট সম্পর্কে চিন্তা করা উচিত। এবং এই উত্তর উভয় ক্ষেত্রে পরিচালনা করে
ফরিদ

27

আমি তালিকার শেষ (এবং প্রথম) উপাদানটি পাওয়ার জন্য মাইক্রো-ব্যবহারের ক্লাস ব্যবহার করি:

public final class Lists {

    private Lists() {
    }

    public static <T> T getFirst(List<T> list) {
        return list != null && !list.isEmpty() ? list.get(0) : null;
    }

    public static <T> T getLast(List<T> list) {
        return list != null && !list.isEmpty() ? list.get(list.size() - 1) : null;
    }
}

সামান্য আরও নমনীয়:

import java.util.List;

/**
 * Convenience class that provides a clearer API for obtaining list elements.
 */
public final class Lists {

  private Lists() {
  }

  /**
   * Returns the first item in the given list, or null if not found.
   *
   * @param <T> The generic list type.
   * @param list The list that may have a first item.
   *
   * @return null if the list is null or there is no first item.
   */
  public static <T> T getFirst( final List<T> list ) {
    return getFirst( list, null );
  }

  /**
   * Returns the last item in the given list, or null if not found.
   *
   * @param <T> The generic list type.
   * @param list The list that may have a last item.
   *
   * @return null if the list is null or there is no last item.
   */
  public static <T> T getLast( final List<T> list ) {
    return getLast( list, null );
  }

  /**
   * Returns the first item in the given list, or t if not found.
   *
   * @param <T> The generic list type.
   * @param list The list that may have a first item.
   * @param t The default return value.
   *
   * @return null if the list is null or there is no first item.
   */
  public static <T> T getFirst( final List<T> list, final T t ) {
    return isEmpty( list ) ? t : list.get( 0 );
  }

  /**
   * Returns the last item in the given list, or t if not found.
   *
   * @param <T> The generic list type.
   * @param list The list that may have a last item.
   * @param t The default return value.
   *
   * @return null if the list is null or there is no last item.
   */
  public static <T> T getLast( final List<T> list, final T t ) {
    return isEmpty( list ) ? t : list.get( list.size() - 1 );
  }

  /**
   * Returns true if the given list is null or empty.
   *
   * @param <T> The generic list type.
   * @param list The list that has a last item.
   *
   * @return true The list is empty.
   */
  public static <T> boolean isEmpty( final List<T> list ) {
    return list == null || list.isEmpty();
  }
}

8
শুধু পেয়ারা ব্যবহার করুন। পুনরায় উদ্ভাবন করবেন না
ক্লিক করুন উপভোট

15
@ ক্লিকআপ্পোট কেবল একটি ক্ষুদ্র পদ্ধতির জন্য পেয়ারা ব্যবহার করা অনেক ক্ষেত্রে ওভারকিল। আমার উত্তর ভ্যানিলা জাভা সমাধান সন্ধানকারী লোকদের জন্য । যদি আপনি ইতিমধ্যে আপনার প্রকল্পে পেয়ারা ব্যবহার করছেন তবে পেয়ারা ভিত্তিক সমাধানের জন্য অন্যান্য উত্তর দেখুন।
ব্যবহারকারী 11153

5
আপনি যদি পেয়ারা ব্যবহার না করেন তবে আপনি এই জাতীয় প্রচুর ইউটিলিটি ক্লাস লিখে শেষ করবেন।
ক্লিক করুন

6
কখনও কখনও তৃতীয় পক্ষের লাইব্রেরি যুক্ত করার অনুমতি পাওয়া একক নেটিভ জাভা ক্লাস যুক্ত করার চেয়ে অনেক বেশি জড়িত হতে পারে। উদাহরণস্বরূপ, সরকারী চুক্তি যেখানে তারা তৃতীয় পক্ষের লাইব্রেরিগুলিকে সীমাবদ্ধ করে এবং স্ক্রীন করে।
ডেভ জার্ভিস

2
isEmpty তালিকাটি খালি কিনা এবং তা এইভাবে হওয়া উচিত কিনা তা যাচাই করে না isNullOrEmpty এবং এটি প্রশ্নের অংশ নয় - হয় আপনি উত্তরগুলির সেটটি বাড়ানোর চেষ্টা করুন বা আপনাকে ইউটিলিটি ক্লাস সরবরাহ করুন (যা পুনরায় আবিষ্কার)।
কার্ল রিখটার

10

size()পদ্ধতি ArrayList উপাদানের সংখ্যা ফেরৎ। উপাদানগুলির সূচক মানগুলি 0হয় (size()-1), সুতরাং আপনি myArrayList.get(myArrayList.size()-1)শেষ উপাদানটি পুনরুদ্ধার করতে ব্যবহার করবেন use



5

আপনি যদি পারেন তবে এটির ArrayListজন্য অদলবদল করুন ArrayDeque, যার মতো সুবিধাজনক পদ্ধতি রয়েছে removeLast


1
এর অর্থ সরাসরি অ্যাক্সেসের জন্য ধ্রুবক ব্যয়ের তুলনায় কমপক্ষে রৈখিক ব্যয়, তবে উল্লেখযোগ্য।
কার্ল রিখটার

নিবন্ধন করুন এটি অ্যারেডেকের ইন্টারফেসে get (int) এর মতো পদ্ধতির অনুপস্থিতির সাথে মিল রাখে। এটি "যদি আপনি পারেন" দ্বারা পরামর্শ দেওয়ার অর্থ; যদি সূচকটি তালিকাটি অ্যাক্সেস না করে থাকে তবে সম্ভবত এটি তালিকা হওয়ার দরকার নেই।
জন গ্লাসমিয়ার

5

জাভাতে তালিকার শেষ উপাদানটি পাওয়ার কোনও মার্জিত উপায় নেই (উদাহরণস্বরূপ items[-1]পাইথনের তুলনায় )।

আপনি ব্যবহার করতে হবে list.get(list.size()-1)

জটিল পদ্ধতি কল দ্বারা প্রাপ্ত তালিকাগুলি নিয়ে কাজ করার সময়, অস্থায়ী পরিবর্তনশীলটির মধ্যে কাজের চাপটি থাকে:

List<E> list = someObject.someMethod(someArgument, anotherObject.anotherMethod());
return list.get(list.size()-1);

কুরুচিপূর্ণ এবং প্রায়শই ব্যয়বহুল বা এমনকি কার্যকর সংস্করণ না এড়াতে এটিই একমাত্র বিকল্প:

return someObject.someMethod(someArgument, anotherObject.anotherMethod()).get(
    someObject.someMethod(someArgument, anotherObject.anotherMethod()).size() - 1
);

জাভা এপিআই-তে এই ডিজাইনের ত্রুটিটি সংশোধন করা হলে এটি দুর্দান্ত হবে।


আমি এখানে একটি "ডিজাইনের ত্রুটি" দেখতে পাচ্ছি না, আপনি যা এনেছেন তা বিরল ব্যবহারের ক্ষেত্রে যা Listইন্টারফেসে যোগ করার উপযুক্ত নয় । আপনি যদি কেবলমাত্র শেষ উপাদানটিতে আগ্রহী হন তবে কেন আপনি তালিকা ফিরিয়ে আনার কোনও পদ্ধতিতে কল করতে চান? আমার মনে নেই আমি এর আগে দেখেছি।
ডোরিয়ান গ্রে

1
@ ডোরিয়ানগ্রী তালিকা থেকে শেষ উপাদানটি পড়া খুব সাধারণ ক্রিয়াকলাপ এবং list.get(list.size()-1)এটি ইস্যুটি দেখানোর সর্বনিম্ন উদাহরণ। আমি সম্মত যে "অগ্রণী" উদাহরণগুলি বিতর্কিত হতে পারে এবং সম্ভবত একটি প্রান্তের মামলা হতে পারে, আমি কেবল এটিই প্রদর্শন করতে চেয়েছিলাম যে বিষয়টি কীভাবে আরও প্রচার করতে পারে। আসুন ধরে নেওয়া যাক যে ক্লাসটি someObjectবিদেশী, বাহ্যিক গ্রন্থাগার থেকে আসছে।
ট্রেগোরেগ

আমি দেখতে পাচ্ছি না এটি কোথায় খুব সাধারণ, এবং যদি এটি হয় তবে এর ArrayDequeপরিবর্তে আপনি আরও ভাল ব্যবহার করুন।
ডোরিয়ান গ্রে

@ ডরিয়ানগ্রায় এই প্রশ্নটির অনেকগুলি উত্সাহ এবং মতামত রয়েছে, তাই এখানে অনেকের শেষের মানটি পেতে আগ্রহী ArrayList
ট্রিগোরেগ

3

সমাধান হিসাবে বলা হয়েছে, যদি Listখালি থাকে তবে একটি IndexOutOfBoundsExceptionনিক্ষেপ করা হয়। আরও ভাল সমাধান হ'ল ধরণটি ব্যবহার করা Optional:

public class ListUtils {
    public static <T> Optional<T> last(List<T> list) {
        return list.isEmpty() ? Optional.empty() : Optional.of(list.get(list.size() - 1));
    }
}

যেমনটি আপনি প্রত্যাশা করেছিলেন, তালিকার শেষ উপাদানটি হিসাবে ফিরে আসবে Optional:

var list = List.of(10, 20, 30);
assert ListUtils.last(list).orElse(-1) == 30;

এটি খালি তালিকার পাশাপাশি কৌতূহলীভাবে আচরণ করে:

var emptyList = List.<Integer>of();
assert ListUtils.last(emptyList).orElse(-1) == -1;

2

আপনি যদি এর পরিবর্তে লিংকডলিস্ট ব্যবহার করেন তবে আপনি প্রথমটি এবং শেষটি কেবল getFirst()এবং এর মাধ্যমে অ্যাক্সেস করতে পারেনgetLast() (আপনি যদি আকার () -1 এর চেয়ে পরিষ্কার উপায় চান এবং (0)) পেতে পারেন

বাস্তবায়ন

একটি লিঙ্কযুক্ত তালিকা ঘোষণা করুন

LinkedList<Object> mLinkedList = new LinkedList<>();

তারপরে আপনি যা চান তা পেতে আপনি এই পদ্ধতিগুলি ব্যবহার করতে পারেন, এক্ষেত্রে আমরা একটি তালিকার প্রথম এবং শেষ উপাদানটির বিষয়ে কথা বলছি

/**
     * Returns the first element in this list.
     *
     * @return the first element in this list
     * @throws NoSuchElementException if this list is empty
     */
    public E getFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return f.item;
    }

    /**
     * Returns the last element in this list.
     *
     * @return the last element in this list
     * @throws NoSuchElementException if this list is empty
     */
    public E getLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return l.item;
    }

    /**
     * Removes and returns the first element from this list.
     *
     * @return the first element from this list
     * @throws NoSuchElementException if this list is empty
     */
    public E removeFirst() {
        final Node<E> f = first;
        if (f == null)
            throw new NoSuchElementException();
        return unlinkFirst(f);
    }

    /**
     * Removes and returns the last element from this list.
     *
     * @return the last element from this list
     * @throws NoSuchElementException if this list is empty
     */
    public E removeLast() {
        final Node<E> l = last;
        if (l == null)
            throw new NoSuchElementException();
        return unlinkLast(l);
    }

    /**
     * Inserts the specified element at the beginning of this list.
     *
     * @param e the element to add
     */
    public void addFirst(E e) {
        linkFirst(e);
    }

    /**
     * Appends the specified element to the end of this list.
     *
     * <p>This method is equivalent to {@link #add}.
     *
     * @param e the element to add
     */
    public void addLast(E e) {
        linkLast(e);
    }

সুতরাং, তারপর আপনি ব্যবহার করতে পারেন

mLinkedList.getLast(); 

তালিকার শেষ উপাদানটি পেতে।


1

পেয়ারা একটি থেকে শেষ উপাদানটি পাওয়ার আরও একটি উপায় সরবরাহ করে List:

last = Lists.reverse(list).get(0)

প্রদত্ত তালিকাটি খালি থাকলে এটি একটি নিক্ষেপ করে IndexOutOfBoundsException


1
java.util.Collections#reverseএটাও করে না
RoBeaToZ

1
@ রোবিটোজ, এটি করে তবে এটি এর মাধ্যমে পুনরাবৃত্তি করে আসল তালিকার পরিবর্তন করে এবং অকার্যকর প্রত্যাবর্তন করে, সুতরাং এটি এই উদ্দেশ্যে উপযুক্ত বলে মনে করে না।
পেরো_হিরো

0

যেহেতু অ্যারেলিস্টে সূচিটি 0 থেকে শুরু হয় এবং আসল আকারের আগে এক জায়গা শেষ হয় তাই শেষ অ্যারেলিস্ট উপাদানটি ফেরত দেওয়ার সঠিক বিবৃতিটি হ'ল:

int last = mylist.get (mylist.size () - 1);

উদাহরণ স্বরূপ:

অ্যারের তালিকার আকার যদি 5 হয় তবে আকার -1 = 4 শেষ অ্যারের উপাদানটি ফিরিয়ে আনবে।


-1

তালিকার শেষ আইটেমটি হ'ল list.size() - 1। সংগ্রহটি একটি অ্যারে দ্বারা সমর্থিত হয় এবং অ্যারে সূচক 0 থেকে শুরু হয়।

সুতরাং তালিকার উপাদান 1 অ্যারে সূচক 0 এ রয়েছে

তালিকার 2 টি উপাদানটি অ্যারের সূচক 1 এ রয়েছে

তালিকার 3 টি উপাদান অ্যারেতে সূচক 2 এ রয়েছে

ইত্যাদি


3
@ জোহানেস
কার্ল রিখটার

-3

এই সম্পর্কে .. আপনার ক্লাস কোথাও ...

List<E> list = new ArrayList<E>();
private int i = -1;
    public void addObjToList(E elt){
        i++;
        list.add(elt);
    }


    public E getObjFromList(){
        if(i == -1){ 
            //If list is empty handle the way you would like to... I am returning a null object
            return null; // or throw an exception
        }

        E object = list.get(i);
        list.remove(i); //Optional - makes list work like a stack
        i--;            //Optional - makes list work like a stack
        return object;
    }

-3

আপনি যদি নিজের তালিকাটি পরিবর্তন করেন তবে listIterator()সর্বশেষ সূচি (যা size()-1যথাক্রমে) থেকে ব্যবহার করুন এবং পুনরাবৃত্তি করুন । আপনি যদি আবার ব্যর্থ হন তবে আপনার তালিকার কাঠামোটি পরীক্ষা করে দেখুন।


-3

অ্যারেলিস্টের শেষ মানটি পেতে আপনাকে যা করতে হবে তা হ'ল আকার ()। প্রাক্তন জন্য। আপনি যদি পূর্ণসংখ্যার অ্যারেলিস্ট হন তবে সর্বশেষ মান পেতে আপনাকে করতে হবে

int lastValue = arrList.get(arrList.size()-1);

মনে রাখবেন, অ্যারেলিস্টে থাকা উপাদানগুলিকে সূচক মান ব্যবহার করে অ্যাক্সেস করা যেতে পারে। সুতরাং, অ্যারেলিস্টগুলি সাধারণত আইটেমগুলি অনুসন্ধান করতে ব্যবহৃত হয়।


4
@ জোহানেস
কার্ল রিখটার

-4

অ্যারেগুলি তাদের দৈর্ঘ্য নামে পরিচিত একটি স্থানীয় ভেরিয়েবলে তাদের আকার সংরক্ষণ করে। "ক" নামের একটি অ্যারে দেওয়া আপনি সূচীর মান না জেনে শেষ সূচকটি উল্লেখ করতে নিম্নলিখিতটি ব্যবহার করতে পারেন

একটি [a.length -1]

আপনি এই শেষ সূচকটিতে 5 এর মান নির্ধারণ করতে:

একটি [a.length -1] = 5;


এটি ArrayListএকটি অ্যারে নয়।
glee8e

-6

স্ট্রিম এপিআই ব্যবহার করে বিকল্প:

list.stream().reduce((first, second) -> second)

শেষ উপাদানটির একটি ptionচ্ছিক ফলাফল।


-7

কোটলিনে, আপনি এই পদ্ধতিটি ব্যবহার করতে পারেন last:

val lastItem = list.last()

9
এটি অবশ্য জাভা
যাচিডিচ

4
কোটলিন তৈরির পেছনের অন্যতম ধারণা ছিল জাভাটির সামান্য অস্বস্তিকর দিকগুলি coverাকা দেওয়া। সুতরাং আমি মনে করি কোটলিনকে বিবেচনা করার পরামর্শ দেওয়া বুদ্ধিমানের কাজ, অন্তত অ্যাপ্লিকেশনগুলির যে অংশগুলিতে ডেটা অ্যানাল্যাসিস করে for
এরিক সোভেন পিউডিস্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.