كيف يمكنني سلسلة اثنين من الثنائيات في إرلانج؟

StackOverflow https://stackoverflow.com/questions/600642

  •  03-07-2019
  •  | 
  •  

سؤال

وكيف يمكنني سلسلة اثنين من الثنائيات في إرلانج؟

وعلى سبيل المثال، دعنا نقول لدي:

B1 = <<1,2>>.
B2 = <<3,4>>.

وكيف يمكنني سلسلة B1 و B2 إلى B3 خلق ثنائي وهو << 1،2،3،4 >>؟

والسبب أنا أسأل هذا لأنني أكتب الرمز إلى ترميز حزمة لبعض بروتوكول الشبكات. أنا تنفيذ ذلك عن طريق كتابة الترميز للحقول في الحزمة، وأنا بحاجة لسلسلة هذه المجالات لبناء الحزمة بأكملها.

وربما أنا أفعل هذا في الطريق الخطأ. يجب أن بناء الحزمة على شكل قائمة من الأعداد الصحيحة وتحويل القائمة إلى ثنائي في آخر لحظة؟

هل كانت مفيدة؟

المحلول

والجواب هو لا. gen_tcp: إرسال ستقبل القوائم عميقة. لذا، سلسلة هي ببساطة:

B3 = [B1, B2].

وهذا هو O (1). بشكل عام، عند التعامل مع هذا النوع من البيانات بناء دائما هياكل قائمة عميقة والسماح إجراءات IO المشي هيكل في الإخراج. المضاعفات الوحيدة هي أن أي إجراءات المتوسطة سيكون استعرض القوائم عميقة.

نصائح أخرى

28> B1= <<1,2>>.
<<1,2>>
29> B2= <<3,4>>.
<<3,4>>
30> B3= <<B1/binary, B2/binary>>.
<<1,2,3,4>>
31>

لاستخدام io_list، هل يمكن أن تفعل:

erlang:iolist_to_binary([<<"foo">>, <<"bar">>])

والتي هي لطيفة وسهلة القراءة. يمكنك أيضا استخدام القوائم والأشياء في وجود لو كان أكثر ملاءمة.

لبناء على الاجابة مشاركة:

bjoin(List) ->
    F = fun(A, B) -> <<A/binary, B/binary>> end,
    lists:foldr(F, <<>>, List).

واستخدام list_to_binary وظيفة إرلانج (قائمة) يمكنك العثور على وثائق هنا: http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top