Julia: Split () التحسين ، keep_splitter

تم إنشاؤها على ١٦ فبراير ٢٠١٧  ·  3تعليقات  ·  مصدر: JuliaLang/julia

أهلا،

أود أن أقترح طلب ميزة ، والذي أعمل عليه الآن في فرع جديد ، للوظيفة split(str, splitter; limit=0, keep=true) .

وجدت نفسي أحاول استخدام الوظيفة بهذه الطريقة ، وما أتوقعه بطريقة ما هو ما يلي ،

julia> split("abcabcdabbcd", "b"; keep_splitter = true)
3-element Array{SubString{String},1}:
 "a"   
 "bca" 
 "bcda"
 "b"
 "bcd"

هل يجب علي الاستمرار في العمل؟ هل سيكون تغيير جذري لبقية النظام البيئي؟

بعض الافكار:

  • إذا كان العلم keep_spliter هو true ، فلا يجب أن يُحدث أي فرق سواء كان keep (الذي يعني النتائج الفارغة) ، هو true أو false ، لأنه لن تكون هناك نتائج فارغة على الإطلاق.
  • لست متأكدًا مما إذا كنت تريد تضمين علامة أخرى لتضمين الفاصل فقط في السلسلة الفرعية التالية أم إلى السلسلة السابقة. هذه هي الطريقة التي يعمل بها readlines(file) ، أليس كذلك؟ في كل عنصر من المصفوفة لدينا '\n' في النهاية.
julia> split("abcabcdabbcd", "b"; keep_splitter = true, prepend = false)
3-element Array{SubString{String},1}:
 "ab"   
 "cab" 
 "cdab"
 "b"
 "cd"

شكرا لك مقدما!

ملاحظة ، ربما يمكن إجراؤها بوظيفة أخرى لا أعرفها بعد

collections design strings

التعليق الأكثر فائدة

يظهر هذا أيضًا عند محاولة تقسيم سلاسل حالة الجمل:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

الحل هو استخدام محدد regex: split(foo, r"(?=[A-Z])") لكن هذا أقل بديهية (ولم أكن لأحلها بدون مساعدة خارجية).

ال 3 كومينتر

مرتبطة بوظيفة splitlines محتملة (https://github.com/JuliaLang/julia/pull/20390) ، وبالوسيطة chomp إلى readline / eachline (https://github.com/JuliaLang/julia/pull/19944 ، https://github.com/JuliaLang/julia/pull/19944).

نسخة إلى: mpastell

لاحظ أن هناك طريقة أخرى للنظر إلى الكلمة الرئيسية الحالية keep ، ما تفعله حقًا هو أن تقول أنه يمكن تكرار الفاصل الخاص بك مرة واحدة أو أكثر ، أي لفه ضمنيًا في (...)+ باعتباره regex.

يظهر هذا أيضًا عند محاولة تقسيم سلاسل حالة الجمل:

foo = "ThisShouldBeSeparate"
split(foo, isuppercase)
5-element Array{SubString{String},1}:
 ""
 "his"
 "hould"
 "e"
 "eparate"

الحل هو استخدام محدد regex: split(foo, r"(?=[A-Z])") لكن هذا أقل بديهية (ولم أكن لأحلها بدون مساعدة خارجية).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات